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:
Adam Kwolek 2010-12-03 15:10:20 +11:00 committed by NeilBrown
parent a9d868c3a2
commit 92a19f1a78
1 changed files with 7 additions and 7 deletions

14
Grow.c
View File

@ -548,17 +548,17 @@ static void wait_reshape(struct mdinfo *sra)
int fd = sysfs_get_fd(sra, NULL, "sync_action");
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_ZERO(&rfds);
FD_SET(fd, &rfds);
select(fd+1, NULL, NULL, &rfds, NULL);
if (sysfs_fd_get_str(fd, action, 20) < 0) {
close(fd);
return;
}
} while (strncmp(action, "reshape", 7) == 0);
}
close(fd);
}
static int reshape_super(struct supertype *st, long long size, int level,