mirror of
git://sourceware.org/git/lvm2.git
synced 2024-12-21 13:34:40 +03:00
lvmetad: Fix getting vgid_old & avoid removing in-transition VGs.
This commit is contained in:
parent
2b7f7d0ab4
commit
8a8e59fb5a
@ -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 *pvid = daemon_request_str(r, "pvmeta/id", NULL);
|
||||||
const char *vgname = daemon_request_str(r, "vgname", NULL);
|
const char *vgname = daemon_request_str(r, "vgname", NULL);
|
||||||
const char *vgid = daemon_request_str(r, "metadata/id", 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");
|
struct dm_config_node *pvmeta = dm_config_find_node(r.cft->root, "pvmeta");
|
||||||
uint64_t device;
|
uint64_t device;
|
||||||
struct dm_config_tree *cft, *pvmeta_old_dev = NULL, *pvmeta_old_pvid = NULL;
|
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)))) {
|
if ((old = dm_hash_lookup_binary(s->device_to_pvid, &device, sizeof(device)))) {
|
||||||
pvmeta_old_dev = dm_hash_lookup(s->pvid_to_pvmeta, old);
|
pvmeta_old_dev = dm_hash_lookup(s->pvid_to_pvmeta, old);
|
||||||
dm_hash_remove(s->pvid_to_pvmeta, old);
|
dm_hash_remove(s->pvid_to_pvmeta, old);
|
||||||
|
vgid_old = dm_hash_lookup(s->pvid_to_vgid, 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);
|
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);
|
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",
|
return daemon_reply_simple("OK",
|
||||||
"status = %s", orphan ? "orphan" :
|
"status = %s", orphan ? "orphan" :
|
||||||
(complete ? "complete" : "partial"),
|
(complete ? "complete" : "partial"),
|
||||||
|
Loading…
Reference in New Issue
Block a user