summaryrefslogtreecommitdiff
path: root/tools/pvcreate.c
diff options
context:
space:
mode:
authorPeter Rajnoha <prajnoha@redhat.com>2014-08-01 11:28:18 +0200
committerPeter Rajnoha <prajnoha@redhat.com>2014-08-01 11:39:53 +0200
commit54685c20fc9dfb155a2e5bc9d8cf5f0aad944305 (patch)
treed9e7cf739379065ac78cac9ca4fad6124afc09a1 /tools/pvcreate.c
parentc7b9f0ab424136b686cd08ff7416078e7c3728c3 (diff)
downloadlvm2-54685c20fc9dfb155a2e5bc9d8cf5f0aad944305.tar.gz
filters: fix regression caused by commit e80884cd080cad7e10be4588e3493b9000649426
Commit e80884cd080cad7e10be4588e3493b9000649426 tried to dump filters for them to be reevaluated when creating a PV to avoid overwriting any existing signature that may have been created after last scan/filtering. However, we need to call refresh_filters instead of persistent_filter->dump since dump requires proper rescannig to fill up the persistent filter again. However, this is true only for pvcreate but not for vgcreate with PV creation where the scanning happens before this PV creation and hence the next rescan (if not full scan), does not fill the persistent filter. Also, move refresh_filters so that it's called sooner and only for pvcreate, vgcreate already calls lvmcache_label_scan(cmd, 2) which then calls refresh_filters itself, so no need to reevaluate this again. This caused the persistent filter (/etc/lvm/cache/.cache file) to be wrong and contain only the PV just being processed with vgcreate <vg_name> <pv_name_to_create>. This regression caused other block devices to be filtered out in case the vgcreate with PV creation was used and then the persistent filter is used by any other LVM command afterwards.
Diffstat (limited to 'tools/pvcreate.c')
-rw-r--r--tools/pvcreate.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/tools/pvcreate.c b/tools/pvcreate.c
index 958e353b5..67ecd41c9 100644
--- a/tools/pvcreate.c
+++ b/tools/pvcreate.c
@@ -105,6 +105,15 @@ int pvcreate(struct cmd_context *cmd, int argc, char **argv)
return EINVALID_CMD_LINE;
}
+ /*
+ * Make sure we don't overwrite any existing signature
+ * that may have been created after last time we did filtering.
+ */
+ if (!(refresh_filters(cmd))) {
+ log_error("Failed to refresh filters before pvcreate.");
+ return ECMD_FAILED;
+ }
+
for (i = 0; i < argc; i++) {
if (sigint_caught())
return_ECMD_FAILED;