File 0240-reshape-support-raid5-grow-on-certain-older-kernels.patch of Package mdadm.5365
Git-commit: 783bbc2b131e2cfea7870f91c194920a45fd556c Mon Sep 17 00:00:00 2001
From: NeilBrown <neilb@suse.de>
Date: Thu, 26 Mar 2015 10:06:26 +1100
Subject: [PATCH] reshape: support raid5 grow on certain older kernels.
References: bnc#923920
Kernels between
c6563a8c38fde3c1c7fc925a v3.5-rc1~110^2~53
and
b5254dd5fdd9abcacadb5101 v3.5-rc1~110^2~51
allow new_offset to be set, but don't then allow a RAID5
to be reshaped to change that offset.
Due to selective backports, this includes the SLES11-SP3 kernel.
It is quite easy to handle this case in mdadm, so we do.
Specifically: if the reshape with data-offset fails with EINVAL,
abort the data-offset change and try the "old" way.
Signed-off-by: NeilBrown <neilb@suse.de>
---
Grow.c | 15 +++++++++++++--
1 file changed, 13 insertions(+), 2 deletions(-)
--- mdadm-3.3.1.orig/Grow.c
+++ mdadm-3.3.1/Grow.c
@@ -3145,8 +3145,19 @@ static int reshape_array(char *container
devname, container, &reshape) < 0)
goto release;
if (sysfs_set_str(sra, NULL, "sync_action", "reshape") < 0) {
- pr_err("Failed to initiate reshape!\n");
- goto release;
+ struct mdinfo *sd;
+ if (errno != EINVAL) {
+ pr_err("Failed to initiate reshape!\n");
+ goto release;
+ }
+ /* revert data_offset and try the old way */
+ for (sd = sra->devs; sd; sd = sd->next) {
+ sysfs_set_num(sra, sd, "new_offset",
+ sd->data_offset);
+ sysfs_set_str(sra, NULL, "reshape_direction",
+ "forwards");
+ }
+ break;
}
if (info->new_level == reshape.level)
return 0;