]> git.ipfire.org Git - thirdparty/mdadm.git/commitdiff
Check and remove bitmap first when reshape to raid0
authorXiao Ni <xni@redhat.com>
Tue, 22 Dec 2015 03:09:34 +0000 (11:09 +0800)
committerNeilBrown <neilb@suse.com>
Tue, 22 Dec 2015 04:16:08 +0000 (15:16 +1100)
If reshape one raid device with bitmap to raid0, the reshape progress will
start. But it'll fail and lose some components. So it should remove bitmap
first.

Signed-off-by: Xiao Ni <xni@redhat.com>
Signed-off-by: NeilBrown <neilb@suse.com>
Grow.c

diff --git a/Grow.c b/Grow.c
index 6dfb9c9cf11a1f97d8507e38cbf7b9a7d1edd20f..89e4c3413190e238d16afa2417cb8811501ce93d 100755 (executable)
--- a/Grow.c
+++ b/Grow.c
@@ -1590,6 +1590,15 @@ int Grow_reshape(char *devname, int fd,
                pr_err("Cannot increase raid-disks on this array beyond %d\n", st->max_devs);
                return 1;
        }
+       if (s->level == 0 &&
+           (array.state & (1<<MD_SB_BITMAP_PRESENT)) &&
+           !(array.state & (1<<MD_SB_CLUSTERED))) {
+                array.state &= ~(1<<MD_SB_BITMAP_PRESENT);
+                if (ioctl(fd, SET_ARRAY_INFO, &array)!= 0) {
+                        pr_err("failed to remove internal bitmap.\n");
+                        return 1;
+                }
+        }
 
        /* in the external case we need to check that the requested reshape is
         * supported, and perform an initial check that the container holds the