]> git.ipfire.org Git - thirdparty/mdadm.git/commitdiff
Grow: add 'forked' option to reshape_container.
authorNeilBrown <neilb@suse.de>
Tue, 20 May 2014 06:51:56 +0000 (16:51 +1000)
committerNeilBrown <neilb@suse.de>
Tue, 20 May 2014 06:51:56 +0000 (16:51 +1000)
This is a better match for reshape_array() and means that
"mdadm --grow --continue" will run in the foreground, which
makes more sense.

Signed-off-by: NeilBrown <neilb@suse.de>
Grow.c

diff --git a/Grow.c b/Grow.c
index f6a989daf411d044e77577b57d3c63f758c38be9..2f171521d3b143e3858964b35818b43294114671 100644 (file)
--- a/Grow.c
+++ b/Grow.c
@@ -1514,8 +1514,8 @@ static int reshape_container(char *container, char *devname,
                             struct supertype *st,
                             struct mdinfo *info,
                             int force,
-                            char *backup_file,
-                            int verbose, int restart, int freeze_reshape);
+                            char *backup_file, int verbose,
+                            int forked, int restart, int freeze_reshape);
 
 int Grow_reshape(char *devname, int fd,
                 struct mddev_dev *devlist,
@@ -2067,7 +2067,7 @@ size_change_error:
                 * performed at the level of the container
                 */
                rv = reshape_container(container, devname, -1, st, &info,
-                                      c->force, c->backup_file, c->verbose, 0, 0);
+                                      c->force, c->backup_file, c->verbose, 0, 0, 0);
                frozen = 0;
        } else {
                /* get spare devices from external metadata
@@ -3448,8 +3448,8 @@ int reshape_container(char *container, char *devname,
                      struct supertype *st,
                      struct mdinfo *info,
                      int force,
-                     char *backup_file,
-                     int verbose, int restart, int freeze_reshape)
+                     char *backup_file, int verbose,
+                     int forked, int restart, int freeze_reshape)
 {
        struct mdinfo *cc = NULL;
        int rv = restart;
@@ -3474,7 +3474,7 @@ int reshape_container(char *container, char *devname,
         */
        ping_monitor(container);
 
-       switch (fork()) {
+       switch (forked ? 0 : fork()) {
        case -1: /* error */
                perror("Cannot fork to complete reshape\n");
                unfreeze(st);
@@ -4948,7 +4948,7 @@ int Grow_continue(int mdfd, struct supertype *st, struct mdinfo *info,
                close(cfd);
                ret_val = reshape_container(st->container_devnm, NULL, mdfd,
                                            st, info, 0, backup_file,
-                                           0,
+                                           0, 1,
                                            1 | info->reshape_active,
                                            freeze_reshape);
        } else