summaryrefslogtreecommitdiff
path: root/lib/cache/lvmcache.c
diff options
context:
space:
mode:
authorDavid Teigland <teigland@redhat.com>2015-12-11 14:02:36 -0600
committerDavid Teigland <teigland@redhat.com>2015-12-11 14:20:00 -0600
commit90cf5acff15a26d87d4cabf6601e82846d608a69 (patch)
tree43116806c72f680d73484de614de1265ace5c71d /lib/cache/lvmcache.c
parent3e48354f2d458e80cab4c096b2869bdc1ad463c3 (diff)
downloadlvm2-dev-dct-dev-cache-full-scan.tar.gz
process_each_pv: do full scan earlier to find new devicesdev-dct-dev-cache-full-scan
Before commit c1f246fedfc349c25749da501e68a7f70bd122b0, _get_all_devices() did a full device scan before get_vgnameids() was called. New devices would be added to the dev-cache before label scanning done by get_vgnameids. So, labels would be read from new devices by the first 'pvs' command. After that commit, _get_all_devices() was called after get_vgnameids() was finished with label scanning. So, new devices would be missed by the label scanning, and would not appear to be lvm devices to the first 'pvs' command. A new device would be added to .cache by the first command, so the second 'pvs' command would scan labels from it in get_vgnameids(). Now, the full device scan is factored out of get_all_devices() and called by itself at the start of the command so that new devices will be known before get_vgnameids() scans labels.
Diffstat (limited to 'lib/cache/lvmcache.c')
-rw-r--r--lib/cache/lvmcache.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/lib/cache/lvmcache.c b/lib/cache/lvmcache.c
index 799de6f6e..2a01ec2cb 100644
--- a/lib/cache/lvmcache.c
+++ b/lib/cache/lvmcache.c
@@ -749,6 +749,7 @@ int lvmcache_label_scan(struct cmd_context *cmd, int full_scan)
struct dev_iter *iter;
struct device *dev;
struct format_type *fmt;
+ int dev_count = 0;
int r = 0;
@@ -779,11 +780,17 @@ int lvmcache_label_scan(struct cmd_context *cmd, int full_scan)
goto out;
}
- while ((dev = dev_iter_get(iter)))
+ log_very_verbose("Scanning device labels");
+
+ while ((dev = dev_iter_get(iter))) {
(void) label_read(dev, &label, UINT64_C(0));
+ dev_count++;
+ }
dev_iter_destroy(iter);
+ log_very_verbose("Scanned %d device labels", dev_count);
+
_has_scanned = 1;
/* Perform any format-specific scanning e.g. text files */