Grow: when restarting, do set new details if they are already set.

When restarting a reshape with internal metadata, the new geometry
is already set and the reshape has been start (but has not been
allowed to continue yet).

So in that case, don't set things and don't ask for a reshape.

Signed-off-by: NeilBrown <neilb@suse.de>
This commit is contained in:
NeilBrown 2011-01-31 15:32:19 +11:00
parent 6ef421be17
commit 1e971e7163
1 changed files with 6 additions and 7 deletions

13
Grow.c
View File

@ -627,18 +627,17 @@ static int subarray_set_num(char *container, struct mdinfo *sra, char *name, int
return rc;
}
int start_reshape(struct mdinfo *sra)
int start_reshape(struct mdinfo *sra, int already_running)
{
int err;
sysfs_set_num(sra, NULL, "suspend_lo", 0x7FFFFFFFFFFFFFFFULL);
err = sysfs_set_num(sra, NULL, "suspend_hi", 0);
err = err ?: sysfs_set_num(sra, NULL, "suspend_lo", 0);
/* Setting sync_min can fail if the recovery is already 'running',
* which can happen when restarting an array which is reshaping.
* So don't worry about errors here */
sysfs_set_num(sra, NULL, "sync_min", 0);
if (!already_running)
sysfs_set_num(sra, NULL, "sync_min", 0);
err = err ?: sysfs_set_num(sra, NULL, "sync_max", 0);
err = err ?: sysfs_set_str(sra, NULL, "sync_action", "reshape");
if (!already_running)
err = err ?: sysfs_set_str(sra, NULL, "sync_action", "reshape");
return err;
}
@ -1967,7 +1966,7 @@ started:
}
}
err = start_reshape(sra);
err = start_reshape(sra, (info->reshape_active && !st->ss->external));
if (err) {
fprintf(stderr, Name ": Cannot start reshape for %s\n",
devname);