summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPetr Rockai <prockai@redhat.com>2015-06-10 16:27:12 +0200
committerPetr Rockai <prockai@redhat.com>2015-06-10 16:27:12 +0200
commit632dde0cbc98de9c04b4c2451d09e36d6299bbd6 (patch)
tree158243b090aac825ee8bb3cb1753d34696da2a55
parentc78b6f18d4909dc4e5c873b3b1023c2053443046 (diff)
downloadlvm2-632dde0cbc98de9c04b4c2451d09e36d6299bbd6.tar.gz
metadata: When outdated PVs are wiped, notify lvmetad about the fact.
-rw-r--r--lib/cache/lvmetad.c16
-rw-r--r--lib/cache/lvmetad.h3
-rw-r--r--lib/metadata/metadata.c4
3 files changed, 22 insertions, 1 deletions
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;
}