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:
Nigel Croxon 2021-01-20 15:05:42 -05:00 committed by Jes Sorensen
parent 1fe2e10073
commit 4ae96c8022
1 changed files with 5 additions and 2 deletions

7
Grow.c
View File

@ -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;
}