Grow: fix resent grow_continue breakage.
Commit 5e76dce1ac
changed
Grow_continue to assume a fork had already happened, so that
mdadm --grow --continue
didn't fork. This is good, but it means that if Grow_continue
is run from Assemble, then
mdadm --assemble ....
can misbehave if the array was in the middle of a reshape.
So introduce finer control. Grow_continue only assumes it has
already forked if run from "mdadm --grow --continue".
Signed-off-by: NeilBrown <neilb@suse.de>
This commit is contained in:
parent
2ecda5a3fa
commit
06e293d097
|
@ -1044,7 +1044,7 @@ static int start_array(int mdfd,
|
|||
"array_state", "readonly");
|
||||
if (rv == 0)
|
||||
rv = Grow_continue(mdfd, st, content,
|
||||
c->backup_file,
|
||||
c->backup_file, 0,
|
||||
c->freeze_reshape);
|
||||
} else if (c->readonly &&
|
||||
sysfs_attribute_available(
|
||||
|
@ -1912,7 +1912,7 @@ int assemble_container_content(struct supertype *st, int mdfd,
|
|||
}
|
||||
|
||||
err = Grow_continue(mdfd, st, content, c->backup_file,
|
||||
c->freeze_reshape);
|
||||
0, c->freeze_reshape);
|
||||
} else switch(content->array.level) {
|
||||
case LEVEL_LINEAR:
|
||||
case LEVEL_MULTIPATH:
|
||||
|
|
6
Grow.c
6
Grow.c
|
@ -4920,7 +4920,7 @@ int Grow_continue_command(char *devname, int fd,
|
|||
|
||||
/* continue reshape
|
||||
*/
|
||||
ret_val = Grow_continue(fd, st, content, backup_file, 0);
|
||||
ret_val = Grow_continue(fd, st, content, backup_file, 1, 0);
|
||||
|
||||
Grow_continue_command_exit:
|
||||
if (fd2 > -1)
|
||||
|
@ -4936,7 +4936,7 @@ Grow_continue_command_exit:
|
|||
}
|
||||
|
||||
int Grow_continue(int mdfd, struct supertype *st, struct mdinfo *info,
|
||||
char *backup_file, int freeze_reshape)
|
||||
char *backup_file, int forked, int freeze_reshape)
|
||||
{
|
||||
int ret_val = 2;
|
||||
|
||||
|
@ -4959,7 +4959,7 @@ int Grow_continue(int mdfd, struct supertype *st, struct mdinfo *info,
|
|||
} else
|
||||
ret_val = reshape_array(NULL, mdfd, "array", st, info, 1,
|
||||
NULL, INVALID_SECTORS,
|
||||
backup_file, 0, 1,
|
||||
backup_file, 0, forked,
|
||||
1 | info->reshape_active,
|
||||
freeze_reshape);
|
||||
|
||||
|
|
2
mdadm.h
2
mdadm.h
|
@ -1193,7 +1193,7 @@ extern int Grow_restart(struct supertype *st, struct mdinfo *info,
|
|||
int *fdlist, int cnt, char *backup_file, int verbose);
|
||||
extern int Grow_continue(int mdfd, struct supertype *st,
|
||||
struct mdinfo *info, char *backup_file,
|
||||
int freeze_reshape);
|
||||
int forked, int freeze_reshape);
|
||||
|
||||
extern int restore_backup(struct supertype *st,
|
||||
struct mdinfo *content,
|
||||
|
|
Loading…
Reference in New Issue