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