diff options
author | NeilBrown <neilb@suse.de> | 2013-07-24 12:21:10 +1000 |
---|---|---|
committer | NeilBrown <neilb@suse.de> | 2013-07-24 12:21:10 +1000 |
commit | 3377ee4248b4b710cc8b62fb9f7057dd7b8b4dfe (patch) | |
tree | 3e387bf8ac9ec640b93ff27162d3578784847209 /Grow.c | |
parent | 419e0182849b93582290fe89cf760320f021285c (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.c | 6 |
1 files changed, 4 insertions, 2 deletions
@@ -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) { |