mirror of
git://sourceware.org/git/lvm2.git
synced 2025-03-10 16:58:47 +03:00
Currently if clvmd is running and user issues vgscan,
the device cache file is dumped both in vgscan and clvmd process. Unfortunately, clvmd calls lvmcache_label_scan, it properly destroys persistent filter, but during persistent_filter_dump it merges old cache content back! This causes that change in filters is not properly propagated into device cache after vgscan on cluster. (Only new devices are added.) https://bugzilla.redhat.com/show_bug.cgi?id=591861
This commit is contained in:
parent
1540955fc6
commit
9ad39e546b
@ -1,5 +1,6 @@
|
|||||||
Version 2.02.65 -
|
Version 2.02.65 -
|
||||||
=================================
|
=================================
|
||||||
|
Do not merge old device cache after we run full scan. (2.02.56)
|
||||||
Add pkgconfigdir Makefile variable for make install override.
|
Add pkgconfigdir Makefile variable for make install override.
|
||||||
Switch usage of Libs.private: to Requires.private: in devmapper.pc, lvm2app.pc.
|
Switch usage of Libs.private: to Requires.private: in devmapper.pc, lvm2app.pc.
|
||||||
Use field Requires.private: for devmapper-event.pc.
|
Use field Requires.private: for devmapper-event.pc.
|
||||||
|
2
lib/cache/lvmcache.c
vendored
2
lib/cache/lvmcache.c
vendored
@ -567,7 +567,7 @@ int lvmcache_label_scan(struct cmd_context *cmd, int full_scan)
|
|||||||
* device cache for the benefit of short-lived processes.
|
* device cache for the benefit of short-lived processes.
|
||||||
*/
|
*/
|
||||||
if (full_scan == 2 && cmd->is_long_lived && cmd->dump_filter)
|
if (full_scan == 2 && cmd->is_long_lived && cmd->dump_filter)
|
||||||
persistent_filter_dump(cmd->filter);
|
persistent_filter_dump(cmd->filter, 0);
|
||||||
|
|
||||||
r = 1;
|
r = 1;
|
||||||
|
|
||||||
|
@ -1341,7 +1341,7 @@ int refresh_toolcontext(struct cmd_context *cmd)
|
|||||||
void destroy_toolcontext(struct cmd_context *cmd)
|
void destroy_toolcontext(struct cmd_context *cmd)
|
||||||
{
|
{
|
||||||
if (cmd->dump_filter)
|
if (cmd->dump_filter)
|
||||||
persistent_filter_dump(cmd->filter);
|
persistent_filter_dump(cmd->filter, 1);
|
||||||
|
|
||||||
archive_exit(cmd);
|
archive_exit(cmd);
|
||||||
backup_exit(cmd);
|
backup_exit(cmd);
|
||||||
|
@ -168,7 +168,7 @@ static void _write_array(struct pfilter *pf, FILE *fp, const char *path,
|
|||||||
fprintf(fp, "\n\t]\n");
|
fprintf(fp, "\n\t]\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
int persistent_filter_dump(struct dev_filter *f)
|
int persistent_filter_dump(struct dev_filter *f, int merge_existing)
|
||||||
{
|
{
|
||||||
struct pfilter *pf;
|
struct pfilter *pf;
|
||||||
char *tmp_file;
|
char *tmp_file;
|
||||||
@ -220,7 +220,7 @@ int persistent_filter_dump(struct dev_filter *f)
|
|||||||
/*
|
/*
|
||||||
* If file contents changed since we loaded it, merge new contents
|
* If file contents changed since we loaded it, merge new contents
|
||||||
*/
|
*/
|
||||||
if (info.st_ctime != pf->ctime)
|
if (merge_existing && info.st_ctime != pf->ctime)
|
||||||
/* Keep cft open to avoid losing lock */
|
/* Keep cft open to avoid losing lock */
|
||||||
persistent_filter_load(f, &cft);
|
persistent_filter_load(f, &cft);
|
||||||
|
|
||||||
|
@ -23,6 +23,6 @@ struct dev_filter *persistent_filter_create(struct dev_filter *f,
|
|||||||
|
|
||||||
int persistent_filter_wipe(struct dev_filter *f);
|
int persistent_filter_wipe(struct dev_filter *f);
|
||||||
int persistent_filter_load(struct dev_filter *f, struct config_tree **cft_out);
|
int persistent_filter_load(struct dev_filter *f, struct config_tree **cft_out);
|
||||||
int persistent_filter_dump(struct dev_filter *f);
|
int persistent_filter_dump(struct dev_filter *f, int merge_existing);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
x
Reference in New Issue
Block a user