mirror of
git://sourceware.org/git/lvm2.git
synced 2024-12-22 17:35:59 +03:00
raid: reject conversion request to striped/raid0 on 2-legged raid4/5
raid4/5 LVs may only be converted to striped or raid0/raid0_meta in case they have at least 3 legs. 2-legged raid4/5 are a result of either converting a raid1 to raid4/5 (takeover) or converting a raid4/5 with more than 2 legs to raid1 with 2 legs (reshape). The raid4/5 personalities map those as raid1, thus reject conversion to striped/raid0. Resolves: rhbz1511047
This commit is contained in:
parent
b78add3df5
commit
763db8aab0
@ -5163,15 +5163,23 @@ static int _takeover_downconvert_wrapper(TAKEOVER_FN_ARGS)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (seg_is_any_raid5(seg) &&
|
if (seg_is_raid4(seg) || seg_is_any_raid5(seg)) {
|
||||||
segtype_is_raid1(new_segtype)) {
|
if (segtype_is_raid1(new_segtype)) {
|
||||||
if (seg->area_count != 2) {
|
if (seg->area_count != 2) {
|
||||||
log_error("Can't convert %s LV %s to %s with != 2 legs.",
|
log_error("Can't convert %s LV %s to %s with != 2 legs.",
|
||||||
lvseg_name(seg), display_lvname(lv), new_segtype->name);
|
lvseg_name(seg), display_lvname(lv), new_segtype->name);
|
||||||
return 0;
|
return 0;
|
||||||
|
}
|
||||||
|
if (seg->area_count != new_image_count) {
|
||||||
|
log_error(INTERNAL_ERROR "Bogus new_image_count converting %s LV %s to %s.",
|
||||||
|
lvseg_name(seg), display_lvname(lv), new_segtype->name);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (seg->area_count != new_image_count) {
|
|
||||||
log_error(INTERNAL_ERROR "Bogus new_image_count converting %s LV %s to %s.",
|
if ((segtype_is_striped_target(new_segtype) || segtype_is_any_raid0(new_segtype)) &&
|
||||||
|
seg->area_count < 3) {
|
||||||
|
log_error("Can't convert %s LV %s to %s with < 3 legs.",
|
||||||
lvseg_name(seg), display_lvname(lv), new_segtype->name);
|
lvseg_name(seg), display_lvname(lv), new_segtype->name);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user