On Tue, 5 Aug 2014 03:03:06 -0400 (EDT) Xiao Ni <xni@xxxxxxxxxx> wrote: > Dear all > > > I faced one problem that the system panic after reshaping raid1 to raid0 with bitmap. > The dmesg and calltrace information is like this: > > You can easily reproduce this by those steps: > 1. mdadm -CR /dev/md0 -l1 -n2 /dev/loop[0-1] --bitmap=internal > 2. mdadm --wait /dev/md0 > 3. mdadm --grow -l0 /dev/md0 > 4. mdadm -S /dev/md0 ... > > [ 1485.646746] BUG: unable to handle kernel NULL pointer dereference at 0000000000000038 > [ 1485.654724] IP: [<ffffffff8148db2e>] bitmap_daemon_work+0x24e/0x450 Yes, RAID0 doesn't support bitmaps, so this cannot possibly work. Following patch should turn the crash into a clean failure. Thanks for the report, NeilBrown From 1bdb20e16166240a4ca3b861c48defefaf218874 Mon Sep 17 00:00:00 2001 From: NeilBrown <neilb@xxxxxxx> Date: Wed, 6 Aug 2014 16:34:27 +1000 Subject: [PATCH] md: check for bitmap compatability when changing raid levels. If an array has a bitmap, then it cannot be converted to a level which does not support bitmaps. Reported-by: Xiao Ni <xni@xxxxxxxxxx> Signed-off-by: NeilBrown <neilb@xxxxxxx> diff --git a/drivers/md/md.c b/drivers/md/md.c index 1379b1a3b9ff..3bd13b276e45 100644 --- a/drivers/md/md.c +++ b/drivers/md/md.c @@ -3500,6 +3500,12 @@ level_store(struct mddev *mddev, const char *buf, size_t len) mdname(mddev), clevel); return -EINVAL; } + if (mddev->bitmap && !pers->quiesce) { + module_put(pers->owner); + printk(KERN_WARNING "md: %s: %s does not support a bitmap\n", + mdname(mddev), clevel); + return -EINVAL; + } rdev_for_each(rdev, mddev) rdev->new_raid_disk = rdev->raid_disk;
Attachment:
signature.asc
Description: PGP signature