From fdf481c66563d1dc34dc5fd85b2756fc6466c663 Mon Sep 17 00:00:00 2001 From: Alasdair Kergon Date: Mon, 6 Jan 2003 21:09:04 +0000 Subject: [PATCH] Ignore filter cache at startup if config file is newer than cache. --- lib/commands/toolcontext.c | 4 +++- lib/config/config.c | 7 +++++++ lib/config/config.h | 1 + lib/filters/filter-persistent.c | 2 ++ 4 files changed, 13 insertions(+), 1 deletion(-) diff --git a/lib/commands/toolcontext.c b/lib/commands/toolcontext.c index ca01d1f1d..cf6d51f1b 100644 --- a/lib/commands/toolcontext.c +++ b/lib/commands/toolcontext.c @@ -311,7 +311,9 @@ static int _init_filters(struct cmd_context *cmd) if (!*cmd->sys_dir) cmd->dump_filter = 0; - if (!stat(lvm_cache, &st) && !persistent_filter_load(f4)) + if (!stat(lvm_cache, &st) && + (st.st_mtime > config_file_timestamp(cmd->cf)) && + !persistent_filter_load(f4)) log_verbose("Failed to load existing device cache from %s", lvm_cache); diff --git a/lib/config/config.c b/lib/config/config.c index a418fafba..e104d7723 100644 --- a/lib/config/config.c +++ b/lib/config/config.c @@ -234,6 +234,13 @@ int read_config_file(struct config_tree *cf, const char *file) return r; } +time_t config_file_timestamp(struct config_tree *cf) +{ + struct cs *c = (struct cs *) cf; + + return c->timestamp; +} + /* * Returns 1 if config file reloaded */ diff --git a/lib/config/config.h b/lib/config/config.h index fee68ccb4..3e9c095f2 100644 --- a/lib/config/config.h +++ b/lib/config/config.h @@ -49,6 +49,7 @@ int read_config_fd(struct config_tree *cf, int fd, const char *file, int read_config_file(struct config_tree *cf, const char *file); int write_config_file(struct config_tree *cf, const char *file); int reload_config_file(struct config_tree **cf); +time_t config_file_timestamp(struct config_tree *cf); struct config_node *find_config_node(struct config_node *cn, const char *path, const int separator); diff --git a/lib/filters/filter-persistent.c b/lib/filters/filter-persistent.c index b5f7ca89d..a6cff575a 100644 --- a/lib/filters/filter-persistent.c +++ b/lib/filters/filter-persistent.c @@ -109,6 +109,8 @@ int persistent_filter_load(struct dev_filter *f) r = 1; } + log_very_verbose("Loaded persistent filter cache from %s", pf->file); + out: destroy_config_tree(cf); return r;