]> git.ipfire.org Git - thirdparty/mdadm.git/commitdiff
Grow: don't hold array open while waiting for reshape.
authorNeilBrown <neilb@suse.de>
Wed, 24 Jul 2013 02:21:10 +0000 (12:21 +1000)
committerNeilBrown <neilb@suse.de>
Wed, 24 Jul 2013 02:21:10 +0000 (12:21 +1000)
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>
Grow.c

diff --git a/Grow.c b/Grow.c
index b552a3f375981291f46d134269c9992a71535727..c1ae6e839312d31a8213fc12ea2e7dde35a5cc0d 100644 (file)
--- 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) {