FIX: Honor !reshape state on wait_reshape() entry
When wait_reshape() function starts it can occurs that reshape is finished already, before wait_reshape() start. This can lead to wait for change state inside this function for a long time. To avoid this before wait we should test if finish conditions are not reached already. Signed-off-by: Adam Kwolek <adam.kwolek@intel.com> Signed-off-by: NeilBrown <neilb@suse.de>
This commit is contained in:
parent
a9d868c3a2
commit
92a19f1a78
14
Grow.c
14
Grow.c
|
@ -548,17 +548,17 @@ static void wait_reshape(struct mdinfo *sra)
|
||||||
int fd = sysfs_get_fd(sra, NULL, "sync_action");
|
int fd = sysfs_get_fd(sra, NULL, "sync_action");
|
||||||
char action[20];
|
char action[20];
|
||||||
|
|
||||||
do {
|
if (fd < 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
while (sysfs_fd_get_str(fd, action, 20) > 0 &&
|
||||||
|
strncmp(action, "reshape", 7) == 0) {
|
||||||
fd_set rfds;
|
fd_set rfds;
|
||||||
FD_ZERO(&rfds);
|
FD_ZERO(&rfds);
|
||||||
FD_SET(fd, &rfds);
|
FD_SET(fd, &rfds);
|
||||||
select(fd+1, NULL, NULL, &rfds, NULL);
|
select(fd+1, NULL, NULL, &rfds, NULL);
|
||||||
|
}
|
||||||
if (sysfs_fd_get_str(fd, action, 20) < 0) {
|
close(fd);
|
||||||
close(fd);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
} while (strncmp(action, "reshape", 7) == 0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int reshape_super(struct supertype *st, long long size, int level,
|
static int reshape_super(struct supertype *st, long long size, int level,
|
||||||
|
|
Loading…
Reference in New Issue