summaryrefslogtreecommitdiff
path: root/Grow.c
diff options
context:
space:
mode:
authorNeilBrown <neilb@suse.de>2014-05-20 16:51:56 +1000
committerNeilBrown <neilb@suse.de>2014-05-20 16:51:56 +1000
commitb0140ae83c746d36ff36e2e1375714ae16e0b87b (patch)
tree15b72d8f574b47f101aca42940b33500277e7d03 /Grow.c
parent5e76dce1acd906e8fc8af04973c3a129cdc77fd6 (diff)
Grow: add 'forked' option to reshape_container.
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>
Diffstat (limited to 'Grow.c')
-rw-r--r--Grow.c14
1 files changed, 7 insertions, 7 deletions
diff --git a/Grow.c b/Grow.c
index f6a989da..2f171521 100644
--- 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