[lvm-devel] master - lvmetad: Indicate whether pv_found caused the VG to change.

Petr Rockai mornfall at fedoraproject.org
Fri Mar 14 02:09:14 UTC 2014


Gitweb:        http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=816197aaabbd41dd85d7728a6fd2992c148e124f
Commit:        816197aaabbd41dd85d7728a6fd2992c148e124f
Parent:        5eef269f7719089db2474b3f732f3630467d1bbc
Author:        Petr Rockai <me at mornfall.net>
AuthorDate:    Fri Mar 14 03:04:09 2014 +0100
Committer:     Petr Rockai <me at mornfall.net>
CommitterDate: Fri Mar 14 03:08:19 2014 +0100

lvmetad: Indicate whether pv_found caused the VG to change.

---
 daemons/lvmetad/lvmetad-core.c |    8 +++++++-
 1 files changed, 7 insertions(+), 1 deletions(-)

diff --git a/daemons/lvmetad/lvmetad-core.c b/daemons/lvmetad/lvmetad-core.c
index 8522c11..93a56c6 100644
--- a/daemons/lvmetad/lvmetad-core.c
+++ b/daemons/lvmetad/lvmetad-core.c
@@ -863,7 +863,7 @@ static response pv_found(lvmetad_state *s, request r)
 	struct dm_config_tree *cft, *pvmeta_old_dev = NULL, *pvmeta_old_pvid = NULL;
 	char *old;
 	char *pvid_dup;
-	int complete = 0, orphan = 0;
+	int complete = 0, orphan = 0, changed = 0;
 	int64_t seqno = -1, seqno_old = -1;
 
 	if (!pvid)
@@ -898,10 +898,14 @@ static response pv_found(lvmetad_state *s, request r)
 	if (!(cft->root = dm_config_clone_node(cft, pvmeta, 0)))
                 goto out_of_mem;
 
+	if (pvmeta_old_pvid && compare_config(pvmeta_old_pvid->root, cft->root))
+		changed |= 1;
+
 	if (pvmeta_old_pvid && device != device_old_pvid) {
 		DEBUGLOG(s, "pv %s no longer on device %" PRIu64, pvid, device_old_pvid);
 		dm_free(dm_hash_lookup_binary(s->device_to_pvid, &device_old_pvid, sizeof(device_old_pvid)));
 		dm_hash_remove_binary(s->device_to_pvid, &device_old_pvid, sizeof(device_old_pvid));
+		changed |= 1;
 	}
 
 	if (!dm_hash_insert(s->pvid_to_pvmeta, pvid, cft) ||
@@ -935,6 +939,7 @@ out_of_mem:
 
 		if (!update_metadata(s, vgname, vgid, metadata, &seqno_old))
 			return reply_fail("metadata update failed");
+		changed |= (seqno_old != dm_config_find_int(metadata, "metadata/seqno", -1));
 	} else {
 		lock_pvid_to_vgid(s);
 		vgid = dm_hash_lookup(s->pvid_to_vgid, pvid);
@@ -972,6 +977,7 @@ out_of_mem:
 	return daemon_reply_simple("OK",
 				   "status = %s", orphan ? "orphan" :
 				                     (complete ? "complete" : "partial"),
+				   "changed = %d", changed,
 				   "vgid = %s", vgid ? vgid : "#orphan",
 				   "vgname = %s", vgname ? vgname : "#orphan",
 				   "seqno_before = %"PRId64, seqno_old,




More information about the lvm-devel mailing list