From: NeilBrown Date: Mon, 31 Jan 2011 04:32:19 +0000 (+1100) Subject: Grow: when restarting, do set new details if they are already set. X-Git-Tag: mdadm-3.2~23 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=1e971e71637c16b3694cc510b61cb451e2ae575c;p=thirdparty%2Fmdadm.git 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 --- diff --git a/Grow.c b/Grow.c index da39af76..2a138318 100644 --- a/Grow.c +++ b/Grow.c @@ -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);