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>
This commit is contained in:
parent
1fe2e10073
commit
4ae96c8022
7
Grow.c
7
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);
|
err = err ?: sysfs_set_num(sra, NULL, "sync_max", sync_max_to_set);
|
||||||
if (!already_running && err == 0) {
|
if (!already_running && err == 0) {
|
||||||
int cnt = 5;
|
int cnt = 5;
|
||||||
|
int err2;
|
||||||
do {
|
do {
|
||||||
err = sysfs_set_str(sra, NULL, "sync_action",
|
err = sysfs_set_str(sra, NULL, "sync_action",
|
||||||
"reshape");
|
"reshape");
|
||||||
if (err)
|
err2 = sysfs_set_str(sra, NULL, "sync_max",
|
||||||
|
"max");
|
||||||
|
if (err || err2)
|
||||||
sleep(1);
|
sleep(1);
|
||||||
} while (err && errno == EBUSY && cnt-- > 0);
|
} while (err && err2 && errno == EBUSY && cnt-- > 0);
|
||||||
}
|
}
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue