From 92a19f1a78e040202e3d067960e3b1ecc8162881 Mon Sep 17 00:00:00 2001 From: Adam Kwolek Date: Fri, 3 Dec 2010 15:10:20 +1100 Subject: [PATCH] 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 --- Grow.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Grow.c b/Grow.c index c408a92..3322cf7 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,