]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
MD RAID10: Prep for DM RAID10 device replacement capability
authorJonathan Brassow <jbrassow@redhat.com>
Thu, 11 Oct 2012 02:38:58 +0000 (13:38 +1100)
committerNeilBrown <neilb@suse.de>
Thu, 11 Oct 2012 02:38:58 +0000 (13:38 +1100)
MD RAID10:  Fix a couple potential kernel panics if RAID10 is used by dm-raid

When device-mapper uses the RAID10 personality through dm-raid.c, there is no
'gendisk' structure in mddev and some sysfs information is also not populated.

This patch avoids touching those non-existent structures.

Signed-off-by: Jonathan Brassow <jbrassow@rehdat.com>
Signed-off-by: NeilBrown <neilb@suse.de>
drivers/md/md.c
drivers/md/raid10.c

index feab588adb508a89b1bb4a97b4dc557eaf98952c..85e6786653ea17e485b9ec1bd1fec94159d97e3e 100644 (file)
@@ -2044,8 +2044,14 @@ EXPORT_SYMBOL(md_integrity_register);
 /* Disable data integrity if non-capable/non-matching disk is being added */
 void md_integrity_add_rdev(struct md_rdev *rdev, struct mddev *mddev)
 {
-       struct blk_integrity *bi_rdev = bdev_get_integrity(rdev->bdev);
-       struct blk_integrity *bi_mddev = blk_get_integrity(mddev->gendisk);
+       struct blk_integrity *bi_rdev;
+       struct blk_integrity *bi_mddev;
+
+       if (!mddev->gendisk)
+               return;
+
+       bi_rdev = bdev_get_integrity(rdev->bdev);
+       bi_mddev = blk_get_integrity(mddev->gendisk);
 
        if (!bi_mddev) /* nothing to do */
                return;
index 54860604d09793f7f094d1aa1669b5ba0c519c55..fb5bd607e15cc51d93990be71a5cb1a89332e3d2 100644 (file)
@@ -1694,7 +1694,7 @@ static int raid10_spare_active(struct mddev *mddev)
                           && !test_bit(Faulty, &tmp->rdev->flags)
                           && !test_and_set_bit(In_sync, &tmp->rdev->flags)) {
                        count++;
-                       sysfs_notify_dirent(tmp->rdev->sysfs_state);
+                       sysfs_notify_dirent_safe(tmp->rdev->sysfs_state);
                }
        }
        spin_lock_irqsave(&conf->device_lock, flags);