summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHeinz Mauelshagen <heinzm@redhat.com>2017-04-12 14:38:49 +0200
committerHeinz Mauelshagen <heinzm@redhat.com>2017-04-12 14:38:49 +0200
commit532388fad510c7ba706ecbd4b5fbd2643134d63b (patch)
treed648f022ec3a077889cc736b981cb4074019e4b3
parent01b5820d03c41516222675eb458ce6eb3dff53a7 (diff)
downloadlvm2-532388fad510c7ba706ecbd4b5fbd2643134d63b.tar.gz
lvconvert: fix failing valid regionsize change
Reshape check failed when regionsize changed and current raid type was provided with no other change requested (stripes or stripesize). E.g. "lvconvert --type raid6 --regionsize 256K" on a raid6 LV with != 256K regionsize. Enable --type in test script.
-rw-r--r--lib/metadata/raid_manip.c10
-rw-r--r--test/shell/lvconvert-raid-regionsize.sh2
2 files changed, 5 insertions, 7 deletions
diff --git a/lib/metadata/raid_manip.c b/lib/metadata/raid_manip.c
index f99788fac..961417965 100644
--- a/lib/metadata/raid_manip.c
+++ b/lib/metadata/raid_manip.c
@@ -2389,7 +2389,7 @@ static int _reshape_requested(const struct logical_volume *lv, const struct segm
if (seg_is_any_raid10(seg) && seg->area_count > 2 &&
stripes && stripes < seg->area_count - seg->segtype->parity_devs) {
log_error("Can't remove stripes from raid10");
- goto err;
+ return 2;
}
if (data_copies != seg->data_copies) {
@@ -2400,22 +2400,20 @@ static int _reshape_requested(const struct logical_volume *lv, const struct segm
/* Change layout (e.g. raid5_ls -> raid5_ra) keeping # of stripes */
if (seg->segtype != segtype) {
if (stripes && stripes != _data_rimages_count(seg, seg->area_count))
- goto err;
+ return 2;
return 1;
}
if (stripes && stripes == _data_rimages_count(seg, seg->area_count) &&
- stripe_size == seg->stripe_size) {
+ stripe_size == seg->stripe_size &&
+ region_size == seg->region_size) {
log_error("LV %s already has %u stripes.",
display_lvname(lv), stripes);
return 2;
}
return (stripes || stripe_size) ? 1 : 0;
-
-err:
- return 2;
}
/*
diff --git a/test/shell/lvconvert-raid-regionsize.sh b/test/shell/lvconvert-raid-regionsize.sh
index 9baa99a95..7a6c7f0b2 100644
--- a/test/shell/lvconvert-raid-regionsize.sh
+++ b/test/shell/lvconvert-raid-regionsize.sh
@@ -27,7 +27,7 @@ function _test_regionsize
local vg=$4
local lv=$5
- lvconvert --yes -R $regionsize $vg/$lv
+ lvconvert --type $type --yes -R $regionsize $vg/$lv
[ $? -ne 0 ] && return 1
check lv_field $vg/$lv regionsize "$regionsize_str"
fsck -fn "$DM_DEV_DIR/$vg/$lv"