diff options
author | David Teigland <teigland@redhat.com> | 2015-12-11 14:02:36 -0600 |
---|---|---|
committer | David Teigland <teigland@redhat.com> | 2015-12-11 14:20:00 -0600 |
commit | 90cf5acff15a26d87d4cabf6601e82846d608a69 (patch) | |
tree | 43116806c72f680d73484de614de1265ace5c71d /lib/cache/lvmcache.c | |
parent | 3e48354f2d458e80cab4c096b2869bdc1ad463c3 (diff) | |
download | lvm2-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.c | 9 |
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 */ |