From: NeilBrown Date: Tue, 2 Jul 2013 06:10:27 +0000 (+1000) Subject: revert-reshape: only impose reshape_position tests on raid[456] X-Git-Tag: mdadm-3.3-rc2~75 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=efb3994e4829f35e74b422e61c37eba79561fd4c;p=thirdparty%2Fmdadm.git revert-reshape: only impose reshape_position tests on raid[456] This test is irrelevant for RAID10, so restrict it to those levels in which it is meaningful. Signed-off-by: NeilBrown --- diff --git a/super0.c b/super0.c index b2019dfa..e7d86d87 100644 --- a/super0.c +++ b/super0.c @@ -650,14 +650,15 @@ static int update_super0(struct supertype *st, struct mdinfo *info, pr_err("No active reshape to revert on %s\n", devname); else if (sb->delta_disks == 0) - pr_err("%s: Can on revert reshape which changes number of devices\n", + pr_err("%s: Can only revert reshape which changes number of devices\n", devname); else { int tmp; int parity = sb->level == 6 ? 2 : 1; rv = 0; - if (sb->reshape_position % ( + if (sb->level >= 4 && sb->level <= 6 && + sb->reshape_position % ( sb->new_chunk/512 * (sb->raid_disks - sb->delta_disks - parity))) { pr_err("Reshape position is not suitably aligned.\n"); diff --git a/super1.c b/super1.c index b6e1e919..04272057 100644 --- a/super1.c +++ b/super1.c @@ -1276,14 +1276,17 @@ static int update_super1(struct supertype *st, struct mdinfo *info, * So we reject a revert-reshape unless the * alignment is good. */ - reshape_sectors = __le64_to_cpu(sb->reshape_position); - reshape_chunk = __le32_to_cpu(sb->new_chunk); - reshape_chunk *= __le32_to_cpu(sb->raid_disks) - __le32_to_cpu(sb->delta_disks) - - (__le32_to_cpu(sb->level)==6 ? 2 : 1); - if (reshape_sectors % reshape_chunk) { - pr_err("Reshape position is not suitably aligned.\n"); - pr_err("Try normal assembly as stop again\n"); - return -2; + if (__le32_to_cpu(sb->level) >= 4 && + __le32_to_cpu(sb->level) <= 6) { + reshape_sectors = __le64_to_cpu(sb->reshape_position); + reshape_chunk = __le32_to_cpu(sb->new_chunk); + reshape_chunk *= __le32_to_cpu(sb->raid_disks) - __le32_to_cpu(sb->delta_disks) - + (__le32_to_cpu(sb->level)==6 ? 2 : 1); + if (reshape_sectors % reshape_chunk) { + pr_err("Reshape position is not suitably aligned.\n"); + pr_err("Try normal assembly as stop again\n"); + return -2; + } } sb->raid_disks = __cpu_to_le32(__le32_to_cpu(sb->raid_disks) - __le32_to_cpu(sb->delta_disks));