]> git.ipfire.org Git - thirdparty/mdadm.git/commitdiff
Grow: when restarting, do set new details if they are already set.
authorNeilBrown <neilb@suse.de>
Mon, 31 Jan 2011 04:32:19 +0000 (15:32 +1100)
committerNeilBrown <neilb@suse.de>
Mon, 31 Jan 2011 04:32:19 +0000 (15:32 +1100)
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>
Grow.c

diff --git a/Grow.c b/Grow.c
index da39af762fe284f9edec6a73535ae8f136d1700a..2a1383188aa5a47216a90d7eaf9a321124cc6ee8 100644 (file)
--- 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);