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");
* 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));