[PATCH] md/bitmap: fix online removal of file-backed bitmaps
authorNeilBrown <neilb@suse.de>
Mon, 26 Jun 2006 07:27:43 +0000 (00:27 -0700)
committerLinus Torvalds <torvalds@g5.osdl.org>
Mon, 26 Jun 2006 16:58:38 +0000 (09:58 -0700)
When "mdadm --grow /dev/mdX --bitmap=none" is used to remove a filebacked
bitmap, the bitmap was disconnected from the array, but the file wasn't closed
(until the array was stopped).

The file also wasn't closed if adding the bitmap file failed.

Signed-off-by: Neil Brown <neilb@suse.de>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
drivers/md/md.c

index 8c1e1900893db355510366d564ee8879de95f8b6..ea6837d45fc8c09ad2ba3fbf74accb4b0ff11031 100644 (file)
@@ -3601,10 +3601,13 @@ static int set_bitmap_file(mddev_t *mddev, int fd)
                mddev->pers->quiesce(mddev, 1);
                if (fd >= 0)
                        err = bitmap_create(mddev);
-               if (fd < 0 || err)
+               if (fd < 0 || err) {
                        bitmap_destroy(mddev);
+                       fd = -1; /* make sure to put the file */
+               }
                mddev->pers->quiesce(mddev, 0);
-       } else if (fd < 0) {
+       }
+       if (fd < 0) {
                if (mddev->bitmap_file)
                        fput(mddev->bitmap_file);
                mddev->bitmap_file = NULL;