md/raid: only permit hot-add of compatible integrity profiles
[firefly-linux-kernel-4.4.55.git] / drivers / md / raid10.c
index 84e597e1c4890cd911243c511d1a65e39232e98e..ce959b4ae4dfd9a09d33828f5706d3a6aadd7f71 100644 (file)
@@ -1698,6 +1698,9 @@ static int raid10_add_disk(struct mddev *mddev, struct md_rdev *rdev)
        if (rdev->saved_raid_disk < 0 && !_enough(conf, 1, -1))
                return -EINVAL;
 
+       if (md_integrity_add_rdev(rdev, mddev))
+               return -ENXIO;
+
        if (rdev->raid_disk >= 0)
                first = last = rdev->raid_disk;
 
@@ -1739,9 +1742,6 @@ static int raid10_add_disk(struct mddev *mddev, struct md_rdev *rdev)
                rcu_assign_pointer(p->rdev, rdev);
                break;
        }
-       mddev_suspend(mddev);
-       md_integrity_add_rdev(rdev, mddev);
-       mddev_resume(mddev);
        if (mddev->queue && blk_queue_discard(bdev_get_queue(rdev->bdev)))
                queue_flag_set_unlocked(QUEUE_FLAG_DISCARD, mddev->queue);