[lvm-devel] master - lvmetad: Fix getting vgid_old & avoid removing in-transition VGs.
Petr Rockai
mornfall at fedoraproject.org
Wed Jan 8 14:25:18 UTC 2014
Gitweb: http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=8a8e59fb5afd1f85be5cb96744b3eb34ad9a5e71
Commit: 8a8e59fb5afd1f85be5cb96744b3eb34ad9a5e71
Parent: 2b7f7d0ab488f4f179100e91223788fe268299be
Author: Petr Rockai <prockai at redhat.com>
AuthorDate: Wed Jan 8 14:54:26 2014 +0100
Committer: Petr Rockai <prockai at redhat.com>
CommitterDate: Wed Jan 8 15:22:24 2014 +0100
lvmetad: Fix getting vgid_old & avoid removing in-transition VGs.
---
daemons/lvmetad/lvmetad-core.c | 15 ++++++++-------
1 files changed, 8 insertions(+), 7 deletions(-)
diff --git a/daemons/lvmetad/lvmetad-core.c b/daemons/lvmetad/lvmetad-core.c
index 0659c9d..eefbf1d 100644
--- a/daemons/lvmetad/lvmetad-core.c
+++ b/daemons/lvmetad/lvmetad-core.c
@@ -859,7 +859,7 @@ static response pv_found(lvmetad_state *s, request r)
const char *pvid = daemon_request_str(r, "pvmeta/id", NULL);
const char *vgname = daemon_request_str(r, "vgname", NULL);
const char *vgid = daemon_request_str(r, "metadata/id", NULL);
- const char *vgid_old;
+ const char *vgid_old = NULL;
struct dm_config_node *pvmeta = dm_config_find_node(r.cft->root, "pvmeta");
uint64_t device;
struct dm_config_tree *cft, *pvmeta_old_dev = NULL, *pvmeta_old_pvid = NULL;
@@ -881,12 +881,7 @@ static response pv_found(lvmetad_state *s, request r)
if ((old = dm_hash_lookup_binary(s->device_to_pvid, &device, sizeof(device)))) {
pvmeta_old_dev = dm_hash_lookup(s->pvid_to_pvmeta, old);
dm_hash_remove(s->pvid_to_pvmeta, old);
-
- if ((vgid_old = dm_hash_lookup(s->pvid_to_vgid, pvid))) {
- lock_vg(s, vgid_old);
- vg_remove_if_missing(s, vgid_old, 1);
- unlock_vg(s, vgid_old);
- }
+ vgid_old = dm_hash_lookup(s->pvid_to_vgid, old);
}
pvmeta_old_pvid = dm_hash_lookup(s->pvid_to_pvmeta, pvid);
@@ -953,6 +948,12 @@ static response pv_found(lvmetad_state *s, request r)
unlock_vg(s, vgid);
}
+ if (vgid_old && (!vgid || strcmp(vgid, vgid_old))) {
+ lock_vg(s, vgid_old);
+ vg_remove_if_missing(s, vgid_old, 1);
+ unlock_vg(s, vgid_old);
+ }
+
return daemon_reply_simple("OK",
"status = %s", orphan ? "orphan" :
(complete ? "complete" : "partial"),
More information about the lvm-devel
mailing list