[lvm-devel] master - lvmetad: Flush a VG if it goes completely missing due to pv_found.
Petr Rockai
mornfall at fedoraproject.org
Tue Jan 7 02:32:05 UTC 2014
Gitweb: http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=a832120521ea4cd528b8228bf0fe1cf80fa603e9
Commit: a832120521ea4cd528b8228bf0fe1cf80fa603e9
Parent: 89e7d81d92274ed60b73332e04ceb966e398a0e6
Author: Petr Rockai <prockai at redhat.com>
AuthorDate: Tue Jan 7 03:28:20 2014 +0100
Committer: Petr Rockai <prockai at redhat.com>
CommitterDate: Tue Jan 7 03:28:20 2014 +0100
lvmetad: Flush a VG if it goes completely missing due to pv_found.
---
daemons/lvmetad/lvmetad-core.c | 7 +++++++
1 files changed, 7 insertions(+), 0 deletions(-)
diff --git a/daemons/lvmetad/lvmetad-core.c b/daemons/lvmetad/lvmetad-core.c
index 7409839..19e0b6b 100644
--- a/daemons/lvmetad/lvmetad-core.c
+++ b/daemons/lvmetad/lvmetad-core.c
@@ -859,6 +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;
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;
@@ -880,6 +881,12 @@ 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);
+ }
}
pvmeta_old_pvid = dm_hash_lookup(s->pvid_to_pvmeta, pvid);
More information about the lvm-devel
mailing list