summaryrefslogtreecommitdiff
path: root/Grow.c
diff options
context:
space:
mode:
authorNeilBrown <neilb@suse.de>2013-07-24 12:21:10 +1000
committerNeilBrown <neilb@suse.de>2013-07-24 12:21:10 +1000
commit3377ee4248b4b710cc8b62fb9f7057dd7b8b4dfe (patch)
tree3e387bf8ac9ec640b93ff27162d3578784847209 /Grow.c
parent419e0182849b93582290fe89cf760320f021285c (diff)
Grow: don't hold array open while waiting for reshape.
If we will need to change array level when a reshape completes, a copy of mdadm waits in the background. Currently this copy hold the device (/dev/mdX) open. This prevents the array from being stopped. So close the file descriptor and re-open after the reshape completes. Signed-off-by: NeilBrown <neilb@suse.de>
Diffstat (limited to 'Grow.c')
-rw-r--r--Grow.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/Grow.c b/Grow.c
index b552a3f3..c1ae6e83 100644
--- a/Grow.c
+++ b/Grow.c
@@ -3086,9 +3086,11 @@ static int reshape_array(char *container, int fd, char *devname,
map_fork();
break;
}
+ close(fd);
wait_reshape(sra);
- impose_level(fd, info->new_level, devname, verbose);
-
+ fd = open_dev(sra->sys_name);
+ if (fd >= 0)
+ impose_level(fd, info->new_level, devname, verbose);
return 0;
case 1: /* Couldn't set data_offset, try the old way */
if (data_offset != INVALID_SECTORS) {