summaryrefslogtreecommitdiffstats
path: root/Grow.c
diff options
context:
space:
mode:
authorNigel Croxon <ncroxon@redhat.com>2021-01-20 21:05:42 +0100
committerJes Sorensen <jsorensen@fb.com>2021-03-03 15:29:17 +0100
commit4ae96c802203ec3cfbb089240c56d61f7f4661b3 (patch)
treea157deca4505926ba249b672dd3ff836f260e2ea /Grow.c
parentmdadm/bitmap: locate bitmap calcuate bitmap position wrongly (diff)
downloadmdadm-4ae96c802203ec3cfbb089240c56d61f7f4661b3.tar.xz
mdadm-4ae96c802203ec3cfbb089240c56d61f7f4661b3.zip
mdadm: fix reshape from RAID5 to RAID6 with backup file
Reshaping a 3-disk RAID5 to 4-disk RAID6 will cause a hang of the resync after the grow. Adding a spare disk to avoid degrading the array when growing is successful, but not successful when supplying a backup file on the command line. If the reshape job is not already running, set the sync_max value to max. Signed-off-by: Nigel Croxon <ncroxon@redhat.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
Diffstat (limited to 'Grow.c')
-rw-r--r--Grow.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/Grow.c b/Grow.c
index 6b8321c5..5c2512f6 100644
--- a/Grow.c
+++ b/Grow.c
@@ -931,12 +931,15 @@ int start_reshape(struct mdinfo *sra, int already_running,
err = err ?: sysfs_set_num(sra, NULL, "sync_max", sync_max_to_set);
if (!already_running && err == 0) {
int cnt = 5;
+ int err2;
do {
err = sysfs_set_str(sra, NULL, "sync_action",
"reshape");
- if (err)
+ err2 = sysfs_set_str(sra, NULL, "sync_max",
+ "max");
+ if (err || err2)
sleep(1);
- } while (err && errno == EBUSY && cnt-- > 0);
+ } while (err && err2 && errno == EBUSY && cnt-- > 0);
}
return err;
}