FIX: disks added beyond array should be counted during reshape
During expansion there is more working disks that array can have. Disks with set raid_disk (not a spare disk) during reshape should be counted to allow array state transition to read_only state. Array reconfiguration to new geometry should be done before reshape will be started. Signed-off-by: Adam Kwolek <adam.kwolek@intel.com> Signed-off-by: NeilBrown <neilb@suse.de>
This commit is contained in:
parent
0ac3f64930
commit
882029c86d
10
Assemble.c
10
Assemble.c
|
@ -1504,6 +1504,7 @@ int assemble_container_content(struct supertype *st, int mdfd,
|
|||
{
|
||||
struct mdinfo *dev, *sra;
|
||||
int working = 0, preexist = 0;
|
||||
int expansion = 0;
|
||||
struct map_ent *map = NULL;
|
||||
|
||||
sysfs_init(content, mdfd, 0);
|
||||
|
@ -1522,6 +1523,9 @@ int assemble_container_content(struct supertype *st, int mdfd,
|
|||
working++;
|
||||
else if (errno == EEXIST)
|
||||
preexist++;
|
||||
else if (dev->disk.raid_disk >= content->array.raid_disks &&
|
||||
content->reshape_active)
|
||||
expansion++;
|
||||
if (working == 0) {
|
||||
close(mdfd);
|
||||
return 1;/* Nothing new, don't try to start */
|
||||
|
@ -1532,7 +1536,8 @@ int assemble_container_content(struct supertype *st, int mdfd,
|
|||
content->uuid, chosen_name);
|
||||
|
||||
if (runstop > 0 ||
|
||||
(working + preexist) >= content->array.working_disks) {
|
||||
(working + preexist + expansion) >=
|
||||
content->array.working_disks) {
|
||||
int err;
|
||||
|
||||
switch(content->array.level) {
|
||||
|
@ -1566,6 +1571,9 @@ int assemble_container_content(struct supertype *st, int mdfd,
|
|||
chosen_name, working + preexist);
|
||||
if (preexist)
|
||||
fprintf(stderr, " (%d new)", working);
|
||||
if (expansion)
|
||||
fprintf(stderr, " ( + %d for expansion)",
|
||||
expansion);
|
||||
fprintf(stderr, "\n");
|
||||
}
|
||||
if (!err)
|
||||
|
|
Loading…
Reference in New Issue