]> git.ipfire.org Git - thirdparty/mdadm.git/commitdiff
revert-reshape: only impose reshape_position tests on raid[456]
authorNeilBrown <neilb@suse.de>
Tue, 2 Jul 2013 06:10:27 +0000 (16:10 +1000)
committerNeilBrown <neilb@suse.de>
Tue, 2 Jul 2013 06:10:27 +0000 (16:10 +1000)
This test is irrelevant for RAID10, so restrict it to those
levels in which it is meaningful.

Signed-off-by: NeilBrown <neilb@suse.de>
super0.c
super1.c

index b2019dfaff2a152da26ed96c9d816cb73954e0f7..e7d86d87f7e09a520741e0613db16342e4a7f5c4 100644 (file)
--- 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");
index b6e1e91955601e0a0cc2caa824ff8f60cf7317c0..042720579638f20b50bc08ed898b7515aef17f8f 100644 (file)
--- 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));