[lvm-devel] master - raid: properly rename split image

Zdenek Kabelac zkabelac at fedoraproject.org
Fri Dec 5 12:41:49 UTC 2014


Gitweb:        http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=f3bd9a2797816e1d21003914c4bfa6c19eb3be62
Commit:        f3bd9a2797816e1d21003914c4bfa6c19eb3be62
Parent:        00d53d5fc172ee396ea835a110126f83202724d5
Author:        Zdenek Kabelac <zkabelac at redhat.com>
AuthorDate:    Thu Dec 4 14:24:44 2014 +0100
Committer:     Zdenek Kabelac <zkabelac at redhat.com>
CommitterDate: Fri Dec 5 13:39:42 2014 +0100

raid: properly rename split image

When we split leg from raid - we take a proper new lock for a new LV.
However for now activation checks only 'existince' of device UUID,
but it's not validating device has a proper name.

As a quick fix call suspend()/resume() to rename after split mirror.
---
 WHATS_NEW                    |    1 +
 lib/metadata/raid_manip.c    |   16 ++++++++++++++++
 test/shell/lvconvert-raid.sh |    2 ++
 3 files changed, 19 insertions(+), 0 deletions(-)

diff --git a/WHATS_NEW b/WHATS_NEW
index 11fa6e1..213cc31 100644
--- a/WHATS_NEW
+++ b/WHATS_NEW
@@ -1,5 +1,6 @@
 Version 2.02.115 -
 =====================================
+  Correctly rename active split LV with -splitmirrors for raid1.
   Add report/compact_output to lvm.conf to enable/disable compact report output.
   Still restrict mirror region size to power of 2 when VG extent size is not.
 
diff --git a/lib/metadata/raid_manip.c b/lib/metadata/raid_manip.c
index 5eab551..59d3adb 100644
--- a/lib/metadata/raid_manip.c
+++ b/lib/metadata/raid_manip.c
@@ -1164,6 +1164,22 @@ int lv_raid_split(struct logical_volume *lv, const char *split_name,
 	if (!activate_lv_excl_local(cmd, lvl->lv))
 		return_0;
 
+	/*
+	 * Since newly split LV is typically already active - we need to call
+	 * suspend() and resume() to also rename it.
+	 *
+	 * TODO: activate should recognize it and avoid these 2 calls
+	 */
+	if (!suspend_lv(cmd, lvl->lv)) {
+		log_error("Failed to suspend %s.", lvl->lv->name);
+		return 0;
+	}
+
+	if (!resume_lv(cmd, lvl->lv)) {
+		log_error("Failed to reactivate %s.", lvl->lv->name);
+		return 0;
+	}
+
 	dm_list_iterate_items(lvl, &removal_list)
 		if (!activate_lv_excl_local(cmd, lvl->lv))
 			return_0;
diff --git a/test/shell/lvconvert-raid.sh b/test/shell/lvconvert-raid.sh
index bcf3874..8621311 100644
--- a/test/shell/lvconvert-raid.sh
+++ b/test/shell/lvconvert-raid.sh
@@ -107,6 +107,7 @@ aux wait_for_sync $vg $lv1
 lvconvert --splitmirrors 1 -n $lv2 $vg/$lv1
 check lv_exists $vg $lv1
 check linear $vg $lv2
+check active $vg $lv2
 # FIXME: ensure no residual devices
 lvremove -ff $vg
 
@@ -116,6 +117,7 @@ aux wait_for_sync $vg $lv1
 lvconvert --splitmirrors 1 -n $lv2 $vg/$lv1
 check linear $vg $lv1
 check linear $vg $lv2
+check active $vg $lv2
 # FIXME: ensure no residual devices
 lvremove -ff $vg
 




More information about the lvm-devel mailing list