mdadm: fix growing containers
This fixes growing containers which was broken with
commit 4ae96c8022
(mdadm: fix reshape from RAID5 to RAID6 with
backup file)
The issue being that containers use the function
wait_for_reshape_isms and expect a number value and not a
string value of "max". The change is to test for external
before setting the correct value.
Signed-off-by: Nigel Croxon <ncroxon@redhat.com>
Signed-off-by: Jes Sorensen <jsorensen@fb.com>
This commit is contained in:
parent
af3396dadf
commit
78c93b006e
19
Grow.c
19
Grow.c
|
@ -921,7 +921,7 @@ static int subarray_set_num(char *container, struct mdinfo *sra, char *name, int
|
||||||
}
|
}
|
||||||
|
|
||||||
int start_reshape(struct mdinfo *sra, int already_running,
|
int start_reshape(struct mdinfo *sra, int already_running,
|
||||||
int before_data_disks, int data_disks)
|
int before_data_disks, int data_disks, struct supertype *st)
|
||||||
{
|
{
|
||||||
int err;
|
int err;
|
||||||
unsigned long long sync_max_to_set;
|
unsigned long long sync_max_to_set;
|
||||||
|
@ -935,20 +935,23 @@ int start_reshape(struct mdinfo *sra, int already_running,
|
||||||
else
|
else
|
||||||
sync_max_to_set = (sra->component_size * data_disks
|
sync_max_to_set = (sra->component_size * data_disks
|
||||||
- sra->reshape_progress) / data_disks;
|
- sra->reshape_progress) / data_disks;
|
||||||
|
|
||||||
if (!already_running)
|
if (!already_running)
|
||||||
sysfs_set_num(sra, NULL, "sync_min", sync_max_to_set);
|
sysfs_set_num(sra, NULL, "sync_min", sync_max_to_set);
|
||||||
err = err ?: sysfs_set_num(sra, NULL, "sync_max", sync_max_to_set);
|
|
||||||
|
if (st->ss->external)
|
||||||
|
err = err ?: sysfs_set_num(sra, NULL, "sync_max", sync_max_to_set);
|
||||||
|
else
|
||||||
|
err = err ?: sysfs_set_str(sra, NULL, "sync_max", "max");
|
||||||
|
|
||||||
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");
|
||||||
err2 = sysfs_set_str(sra, NULL, "sync_max",
|
if (err)
|
||||||
"max");
|
|
||||||
if (err || err2)
|
|
||||||
sleep(1);
|
sleep(1);
|
||||||
} while (err && err2 && errno == EBUSY && cnt-- > 0);
|
} while (err && errno == EBUSY && cnt-- > 0);
|
||||||
}
|
}
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
@ -3470,7 +3473,7 @@ started:
|
||||||
goto release;
|
goto release;
|
||||||
|
|
||||||
err = start_reshape(sra, restart, reshape.before.data_disks,
|
err = start_reshape(sra, restart, reshape.before.data_disks,
|
||||||
reshape.after.data_disks);
|
reshape.after.data_disks, st);
|
||||||
if (err) {
|
if (err) {
|
||||||
pr_err("Cannot %s reshape for %s\n",
|
pr_err("Cannot %s reshape for %s\n",
|
||||||
restart ? "continue" : "start", devname);
|
restart ? "continue" : "start", devname);
|
||||||
|
|
Loading…
Reference in New Issue