Grow_continue: handle RESHAPE_NO_BACKUP correctly.
If the reshape does not require a backup, Grow_continue can abort early. Signed-off-by: NeilBrown <neilb@suse.de>
This commit is contained in:
parent
26bf55874d
commit
8ecf12b9f8
12
Grow.c
12
Grow.c
|
@ -2672,6 +2672,8 @@ static int reshape_array(char *container, int fd, char *devname,
|
||||||
/* reshape already started. just skip to monitoring the reshape */
|
/* reshape already started. just skip to monitoring the reshape */
|
||||||
if (reshape.backup_blocks == 0)
|
if (reshape.backup_blocks == 0)
|
||||||
return 0;
|
return 0;
|
||||||
|
if (restart & RESHAPE_NO_BACKUP)
|
||||||
|
return 0;
|
||||||
goto started;
|
goto started;
|
||||||
}
|
}
|
||||||
/* The container is frozen but the array may not be.
|
/* The container is frozen but the array may not be.
|
||||||
|
@ -2884,8 +2886,6 @@ static int reshape_array(char *container, int fd, char *devname,
|
||||||
goto release;
|
goto release;
|
||||||
}
|
}
|
||||||
|
|
||||||
started:
|
|
||||||
|
|
||||||
if (array.level == 10) {
|
if (array.level == 10) {
|
||||||
/* Reshaping RAID10 does not require any data backup by
|
/* Reshaping RAID10 does not require any data backup by
|
||||||
* user-space. Instead it requires that the data_offset
|
* user-space. Instead it requires that the data_offset
|
||||||
|
@ -2943,6 +2943,7 @@ started:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
started:
|
||||||
/* Decide how many blocks (sectors) for a reshape
|
/* Decide how many blocks (sectors) for a reshape
|
||||||
* unit. The number we have so far is just a minimum
|
* unit. The number we have so far is just a minimum
|
||||||
*/
|
*/
|
||||||
|
@ -4686,10 +4687,13 @@ int Grow_continue(int mdfd, struct supertype *st, struct mdinfo *info,
|
||||||
close(cfd);
|
close(cfd);
|
||||||
ret_val = reshape_container(st->container_devnm, NULL, mdfd,
|
ret_val = reshape_container(st->container_devnm, NULL, mdfd,
|
||||||
st, info, 0, backup_file,
|
st, info, 0, backup_file,
|
||||||
0, 1, freeze_reshape);
|
0,
|
||||||
|
1 | info->reshape_active,
|
||||||
|
freeze_reshape);
|
||||||
} else
|
} else
|
||||||
ret_val = reshape_array(NULL, mdfd, "array", st, info, 1,
|
ret_val = reshape_array(NULL, mdfd, "array", st, info, 1,
|
||||||
NULL, 0ULL, backup_file, 0, 0, 1,
|
NULL, 0ULL, backup_file, 0, 0,
|
||||||
|
1 | info->reshape_active,
|
||||||
freeze_reshape);
|
freeze_reshape);
|
||||||
|
|
||||||
return ret_val;
|
return ret_val;
|
||||||
|
|
Loading…
Reference in New Issue