summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZdenek Kabelac <zkabelac@redhat.com>2014-12-04 14:24:44 +0100
committerZdenek Kabelac <zkabelac@redhat.com>2014-12-05 13:39:42 +0100
commitf3bd9a2797816e1d21003914c4bfa6c19eb3be62 (patch)
tree46cc8ac997af982059e1bfc38cb954e0a4622bc9
parent00d53d5fc172ee396ea835a110126f83202724d5 (diff)
downloadlvm2-f3bd9a2797816e1d21003914c4bfa6c19eb3be62.tar.gz
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.
-rw-r--r--WHATS_NEW1
-rw-r--r--lib/metadata/raid_manip.c16
-rw-r--r--test/shell/lvconvert-raid.sh2
3 files changed, 19 insertions, 0 deletions
diff --git a/WHATS_NEW b/WHATS_NEW
index 11fa6e1f2..213cc3132 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 5eab5516b..59d3adb88 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 bcf3874c6..8621311a3 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