Grow: be extra careful about races when freezing an array
If any subarray has any spare devices, then something raced, and we should abort the reshape. Signed-off-by: NeilBrown <neilb@suse.de>
This commit is contained in:
parent
d7ca196cbd
commit
885f984583
13
msg.c
13
msg.c
|
@ -348,8 +348,19 @@ int block_monitor(char *container, const int freeze)
|
|||
sysfs_get_str(sra, NULL, "sync_action", buf, 20) > 0 &&
|
||||
strcmp(buf, "frozen\n") == 0))
|
||||
/* pass */;
|
||||
else
|
||||
else {
|
||||
unblock_subarray(sra, 0);
|
||||
break;
|
||||
}
|
||||
/* Double check against races - there should be no spares
|
||||
* or part-spares
|
||||
*/
|
||||
sysfs_free(sra);
|
||||
sra = sysfs_read(-1, e->devnum, GET_DEVS | GET_STATE);
|
||||
if (sra && sra->array.spare_disks > 0) {
|
||||
unblock_subarray(sra, freeze);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (e) {
|
||||
|
|
Loading…
Reference in New Issue