Blame SOURCES/lvm2-2_02_131-swapping-of-lv-identifiers-handles-more-complex-lvs.patch

a4cb28
 WHATS_NEW              |  1 +
a4cb28
 tools/lvconvert.c      |  4 ++--
a4cb28
 tools/lvconvert_poll.c | 13 +++++++++----
a4cb28
 3 files changed, 12 insertions(+), 6 deletions(-)
a4cb28
a4cb28
diff --git a/WHATS_NEW b/WHATS_NEW
a4cb28
index 9ddecbc..5260321 100644
a4cb28
--- a/WHATS_NEW
a4cb28
+++ b/WHATS_NEW
a4cb28
@@ -1,5 +1,6 @@
a4cb28
 Version 2.02.131 - 
a4cb28
 =====================================
a4cb28
+  Swapping of LV identifiers handles more complex LVs.
a4cb28
   Fix VG metadata comparison failure while scanning the VG for lvmetad.
a4cb28
   Ignore persistent cache if configuration changed. (2.02.127)
a4cb28
 
a4cb28
diff --git a/tools/lvconvert.c b/tools/lvconvert.c
a4cb28
index 2bffb07..919537a 100644
a4cb28
--- a/tools/lvconvert.c
a4cb28
+++ b/tools/lvconvert.c
a4cb28
@@ -2489,14 +2489,14 @@ deactivate_pmslv:
a4cb28
 	if (!detach_pool_metadata_lv(first_seg(pool_lv), &mlv))
a4cb28
 		return_0;
a4cb28
 
a4cb28
+	/* Swap _pmspare and _tmeta name */
a4cb28
 	if (!swap_lv_identifiers(cmd, mlv, pmslv))
a4cb28
 		return_0;
a4cb28
 
a4cb28
-	/* Used _pmspare will become _tmeta */
a4cb28
 	if (!attach_pool_metadata_lv(first_seg(pool_lv), pmslv))
a4cb28
 		return_0;
a4cb28
 
a4cb28
-	/* Used _tmeta will become visible  _meta%d */
a4cb28
+	/* Used _tmeta (now _pmspare) becomes _meta%d */
a4cb28
 	if (!lv_rename_update(cmd, mlv, pms_path, 0))
a4cb28
 		return_0;
a4cb28
 
a4cb28
diff --git a/tools/lvconvert_poll.c b/tools/lvconvert_poll.c
a4cb28
index e3a3709..1b230bc 100644
a4cb28
--- a/tools/lvconvert_poll.c
a4cb28
+++ b/tools/lvconvert_poll.c
a4cb28
@@ -44,15 +44,20 @@ int swap_lv_identifiers(struct cmd_context *cmd,
a4cb28
 			struct logical_volume *a, struct logical_volume *b)
a4cb28
 {
a4cb28
 	union lvid lvid;
a4cb28
-	const char *name;
a4cb28
+	const char *aname = a->name, *bname = b->name;
a4cb28
 
a4cb28
 	lvid = a->lvid;
a4cb28
 	a->lvid = b->lvid;
a4cb28
 	b->lvid = lvid;
a4cb28
 
a4cb28
-	name = a->name;
a4cb28
-	a->name = b->name;
a4cb28
-	if (!lv_rename_update(cmd, b, name, 0))
a4cb28
+	/* rename temporarily to 'unused' name */
a4cb28
+	if (!lv_rename_update(cmd, a, "pmove_tmeta", 0))
a4cb28
+		return_0;
a4cb28
+	/* name rename 'b' to unused name of 'a' */
a4cb28
+	if (!lv_rename_update(cmd, b, aname, 0))
a4cb28
+		return_0;
a4cb28
+	/* finish name swapping */
a4cb28
+	if (!lv_rename_update(cmd, a, bname, 0))
a4cb28
 		return_0;
a4cb28
 
a4cb28
 	return 1;