From 632dde0cbc98de9c04b4c2451d09e36d6299bbd6 Mon Sep 17 00:00:00 2001 From: Petr Rockai Date: Wed, 10 Jun 2015 16:27:12 +0200 Subject: [PATCH] metadata: When outdated PVs are wiped, notify lvmetad about the fact. --- lib/cache/lvmetad.c | 16 ++++++++++++++++ lib/cache/lvmetad.h | 3 +++ lib/metadata/metadata.c | 4 +++- 3 files changed, 22 insertions(+), 1 deletion(-) diff --git a/lib/cache/lvmetad.c b/lib/cache/lvmetad.c index 9aac6e9fc..92998bc5f 100644 --- a/lib/cache/lvmetad.c +++ b/lib/cache/lvmetad.c @@ -1161,3 +1161,19 @@ int lvmetad_pvscan_foreign_vgs(struct cmd_context *cmd, activation_handler handl { return _lvmetad_pvscan_all_devs(cmd, handler, 1); } + +int lvmetad_vg_clear_outdated_pvs(struct volume_group *vg) +{ + char uuid[64]; + daemon_reply reply; + int result; + + if (!id_write_format(&vg->id, uuid, sizeof(uuid))) + return_0; + + reply = _lvmetad_send("vg_clear_outdated_pvs", "vgid = %s", uuid, NULL); + result = _lvmetad_handle_reply(reply, "clear the list of outdated PVs", vg->name, NULL); + daemon_reply_destroy(reply); + + return result; +} diff --git a/lib/cache/lvmetad.h b/lib/cache/lvmetad.h index 395bc41b0..822467500 100644 --- a/lib/cache/lvmetad.h +++ b/lib/cache/lvmetad.h @@ -166,6 +166,8 @@ int lvmetad_pvscan_single(struct cmd_context *cmd, struct device *dev, int lvmetad_pvscan_all_devs(struct cmd_context *cmd, activation_handler handler); int lvmetad_pvscan_foreign_vgs(struct cmd_context *cmd, activation_handler handler); +int lvmetad_vg_clear_outdated_pvs(struct volume_group *vg); + # else /* LVMETAD_SUPPORT */ # define lvmetad_init(cmd) do { } while (0) @@ -192,6 +194,7 @@ int lvmetad_pvscan_foreign_vgs(struct cmd_context *cmd, activation_handler handl # define lvmetad_pvscan_single(cmd, dev, handler, ignore_obsolete) (0) # define lvmetad_pvscan_all_devs(cmd, handler) (0) # define lvmetad_pvscan_foreign_vgs(cmd, handler) (0) +# define lvmetad_vg_clear_outdated_pvs(vg) (1) # endif /* LVMETAD_SUPPORT */ diff --git a/lib/metadata/metadata.c b/lib/metadata/metadata.c index 8300eb6f2..75f3038d2 100644 --- a/lib/metadata/metadata.c +++ b/lib/metadata/metadata.c @@ -3307,9 +3307,11 @@ static struct volume_group *_vg_read(struct cmd_context *cmd, *consistent = _repair_inconsistent_vg(correct_vg); else *consistent = !reappeared; - if (_wipe_outdated_pvs(cmd, correct_vg, &correct_vg->pvs_outdated)) + if (_wipe_outdated_pvs(cmd, correct_vg, &correct_vg->pvs_outdated)) { /* clear the list */ dm_list_init(&correct_vg->pvs_outdated); + lvmetad_vg_clear_outdated_pvs(correct_vg); + } } return correct_vg; }