mrc0mmand / rpms / lvm2

Forked from rpms/lvm2 2 years ago
Clone

Blame SOURCES/lvm2-2_02_182-lvconvert-fix-interim-segtype-regression-on-raid6-co.patch

0d8a0a
From 2ee0f6d4ddd6c602def295e3b1dfccbd8a50a4c8 Mon Sep 17 00:00:00 2001
0d8a0a
From: Heinz Mauelshagen <heinzm@redhat.com>
0d8a0a
Date: Fri, 7 Sep 2018 13:48:13 +0200
0d8a0a
Subject: [PATCH] lvconvert: fix interim segtype regression on raid6
0d8a0a
 conversions
0d8a0a
0d8a0a
When converting from striped/raid0/raid0_meta
0d8a0a
to raid6 with > 2 stripes, allow possible
0d8a0a
direct conversion (to raid6_n_6).
0d8a0a
0d8a0a
In case of 2 stripes, first convert to raid5_n to restripe
0d8a0a
to at least 3 data stripes (the raid6 minimum in lvm2) in
0d8a0a
a second conversion before finally converting to raid6_n_6.
0d8a0a
0d8a0a
As before, raid6_n_6 then can be converted
0d8a0a
to any other raid6 layout.
0d8a0a
0d8a0a
Enhance lvconvert-raid-takeover.sh to test the
0d8a0a
2 stripes conversions to raid6.
0d8a0a
0d8a0a
Resolves: rhbz1624038
0d8a0a
(cherry picked from commit e2e30a64ab10602951443dfbd3481bd6b32f5459)
0d8a0a
0d8a0a
Conflicts:
0d8a0a
	WHATS_NEW
0d8a0a
0d8a0a
(cherry picked from commit c26bde42af0930bef2cee95c76951285d801ba70)
0d8a0a
---
0d8a0a
 WHATS_NEW                             |  1 +
0d8a0a
 lib/metadata/raid_manip.c             |  6 +++---
0d8a0a
 test/shell/lvconvert-raid-takeover.sh | 16 ++++++++++++----
0d8a0a
 3 files changed, 16 insertions(+), 7 deletions(-)
0d8a0a
0d8a0a
diff --git a/WHATS_NEW b/WHATS_NEW
0d8a0a
index 9da40b6..d8a24b0 100644
0d8a0a
--- a/WHATS_NEW
0d8a0a
+++ b/WHATS_NEW
0d8a0a
@@ -1,5 +1,6 @@
0d8a0a
 Version 2.02.182 - 
0d8a0a
 ==============================
0d8a0a
+  Fix lvconvert striped/raid0/raid0_meta -> raid6 regression.
0d8a0a
   Add After=rbdmap.service to {lvm2-activation-net,blk-availability}.service.
0d8a0a
   Fix lvconvert conversion attempts to linear.
0d8a0a
   Fix lvconvert raid0/raid0_meta -> striped regression.
0d8a0a
diff --git a/lib/metadata/raid_manip.c b/lib/metadata/raid_manip.c
0d8a0a
index 3eee77a..cb7202a 100644
0d8a0a
--- a/lib/metadata/raid_manip.c
0d8a0a
+++ b/lib/metadata/raid_manip.c
0d8a0a
@@ -6137,10 +6137,10 @@ static int _set_convenient_raid145610_segtype_to(const struct lv_segment *seg_fr
0d8a0a
 	/* striped/raid0 -> */
0d8a0a
 	} else if (seg_is_striped(seg_from) || seg_is_any_raid0(seg_from)) {
0d8a0a
 		if (segtype_is_any_raid6(*segtype))
0d8a0a
-			seg_flag = SEG_RAID6_N_6;
0d8a0a
+			seg_flag = seg_from->area_count < 3 ? SEG_RAID5_N : SEG_RAID6_N_6;
0d8a0a
 
0d8a0a
-		if (segtype_is_linear(*segtype) ||
0d8a0a
-		    (!segtype_is_raid4(*segtype) && !segtype_is_raid10(*segtype) && !segtype_is_striped(*segtype)))
0d8a0a
+		else if (segtype_is_linear(*segtype) ||
0d8a0a
+			 (!segtype_is_raid4(*segtype) && !segtype_is_raid10(*segtype) && !segtype_is_striped(*segtype)))
0d8a0a
 			seg_flag = SEG_RAID5_N;
0d8a0a
 
0d8a0a
 	/* raid1 -> */
0d8a0a
diff --git a/test/shell/lvconvert-raid-takeover.sh b/test/shell/lvconvert-raid-takeover.sh
0d8a0a
index d1c5d30..d22c11b 100644
0d8a0a
--- a/test/shell/lvconvert-raid-takeover.sh
0d8a0a
+++ b/test/shell/lvconvert-raid-takeover.sh
0d8a0a
@@ -108,11 +108,19 @@ function _invalid_raid5_conversions
0d8a0a
 	not _lvconvert raid6 raid6_n_6 4 6 $vg $lv1
0d8a0a
 }
0d8a0a
 
0d8a0a
-# Check raid6 conversion constrainst of minimum 3 stripes
0d8a0a
-_lvcreate striped 2 2 4m $vg $lv1
0d8a0a
-not _lvconvert raid6 raid6_n_6 2 4 $vg $lv1
0d8a0a
-lvremove -y $vg
0d8a0a
+# Check raid6 conversion constrainst for 2 stripes
0d8a0a
+for type in striped raid0 raid0_meta
0d8a0a
+do
0d8a0a
+   _lvcreate $type 2 2 4m $vg $lv1
0d8a0a
+   not _lvconvert raid6 raid6_n_6 2 4 $vg $lv1
0d8a0a
+   _lvconvert raid6 raid5_n 2 3 $vg $lv1
0d8a0a
+   _lvconvert raid6 raid5_n 3 4 $vg $lv1
0d8a0a
+   _lvconvert raid6 raid6_n_6 3 5 $vg $lv1
0d8a0a
+   lvremove -y $vg
0d8a0a
+done
0d8a0a
 
0d8a0a
+
0d8a0a
+# Check raid6 conversion constrainst of minimum 3 stripes
0d8a0a
 _lvcreate raid0 3 3 4m $vg $lv1
0d8a0a
 _lvconvert raid6 raid6_n_6 3 5 $vg $lv1
0d8a0a
 lvremove -y $vg
0d8a0a
-- 
0d8a0a
1.8.3.1
0d8a0a