From: Adam Kwolek Date: Fri, 3 Dec 2010 04:10:20 +0000 (+1100) Subject: FIX: Honor !reshape state on wait_reshape() entry X-Git-Tag: mdadm-3.2~194 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=92a19f1a78e040202e3d067960e3b1ecc8162881;p=thirdparty%2Fmdadm.git 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 Signed-off-by: NeilBrown --- diff --git a/Grow.c b/Grow.c index c408a92a..3322cf77 100644 --- a/Grow.c +++ b/Grow.c @@ -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,