diff options
author | David Teigland <teigland@redhat.com> | 2015-04-20 14:13:50 -0500 |
---|---|---|
committer | David Teigland <teigland@redhat.com> | 2015-04-22 12:13:51 -0500 |
commit | da6fca6e1a584e57b341d9bfb0824fe3a224faeb (patch) | |
tree | 82927a5c15a558a12941935effdfeebe99995b4e | |
parent | 92607ecfe62c2590c7816d53c709d3b96faa2357 (diff) | |
download | lvm2-dev-dct-dupdev3.tar.gz |
Improve duplicate PV handlingdev-dct-dupdev3
Make the processing of duplicate PVs the
same with and without lvmetad.
-rw-r--r-- | lib/cache/lvmcache.c | 9 | ||||
-rw-r--r-- | lib/cache/lvmetad.c | 32 |
2 files changed, 24 insertions, 17 deletions
diff --git a/lib/cache/lvmcache.c b/lib/cache/lvmcache.c index 6f8c95085..c5f78c864 100644 --- a/lib/cache/lvmcache.c +++ b/lib/cache/lvmcache.c @@ -1610,10 +1610,13 @@ struct lvmcache_info *lvmcache_add(struct labeller *labeller, const char *pvid, //dm_is_dm_major(MAJOR(dev->dev))) // else if (!strcmp(pvid_s, existing->dev->pvid)) { - log_error("Found duplicate PV %s: using %s not " - "%s", pvid, dev_name(dev), - dev_name(existing->dev)); + log_error("Found duplicate PV %s: using %s not %s", + pvid_s, + dev_name(existing->dev), + dev_name(dev)); + strncpy(dev->pvid, pvid_s, sizeof(dev->pvid)); _found_duplicate_pvs = 1; + return NULL; } } if (strcmp(pvid_s, existing->dev->pvid)) diff --git a/lib/cache/lvmetad.c b/lib/cache/lvmetad.c index 5de571dba..cd361af58 100644 --- a/lib/cache/lvmetad.c +++ b/lib/cache/lvmetad.c @@ -299,20 +299,6 @@ static struct lvmcache_info *_pv_populate_lvmcache(struct cmd_context *cmd, if (!dev && fallback) dev = dev_cache_get_by_devt(fallback, cmd->filter); - if (alt_devices) - alt_device = alt_devices->v; - - while (alt_device) { - dev_alternate = dev_cache_get_by_devt(alt_device->v.i, cmd->filter); - if (dev_alternate) - log_warn("Found duplicate of PV %s on device %s.", - pvid_txt, dev_name(dev_alternate)); - else - log_warn("Duplicate of PV %s exists on unknown device %"PRId64 ":%" PRId64, - pvid_txt, MAJOR(alt_device->v.i), MINOR(alt_device->v.i)); - alt_device = alt_device->next; - } - if (!dev) { log_warn("WARNING: Device for PV %s not found or rejected by a filter.", pvid_txt); return NULL; @@ -375,6 +361,24 @@ static struct lvmcache_info *_pv_populate_lvmcache(struct cmd_context *cmd, ++i; } while (da); + if (alt_devices) + alt_device = alt_devices->v; + + while (alt_device) { + dev_alternate = dev_cache_get_by_devt(alt_device->v.i, cmd->filter); + if (dev_alternate) + log_warn("Found duplicate PV %s dev %s on other device %s", + pvid_txt, dev_name(dev), dev_name(dev_alternate)); + else + log_warn("Duplicate of PV %s dev %s exists on unknown device %"PRId64 ":%" PRId64, + pvid_txt, dev_name(dev), MAJOR(alt_device->v.i), MINOR(alt_device->v.i)); + + lvmcache_add(fmt->labeller, (const char *)&pvid, dev_alternate, + vgname, (const char *)&vgid, 0); + + alt_device = alt_device->next; + } + return info; } |