]> git.kernelconcepts.de Git - karo-tx-linux.git/blobdiff - drivers/md/md.c
Merge remote-tracking branch 'md/for-next'
[karo-tx-linux.git] / drivers / md / md.c
index 08a4034351deeefa0e4d641b9100d492dfee1425..3f9a514b5b9d78c9c6f5f0e57e143e60c8c685ad 100644 (file)
@@ -2001,12 +2001,9 @@ int md_integrity_register(struct mddev *mddev)
         * All component devices are integrity capable and have matching
         * profiles, register the common profile for the md device.
         */
         * All component devices are integrity capable and have matching
         * profiles, register the common profile for the md device.
         */
-       if (blk_integrity_register(mddev->gendisk,
-                       bdev_get_integrity(reference->bdev)) != 0) {
-               printk(KERN_ERR "md: failed to register integrity for %s\n",
-                       mdname(mddev));
-               return -EINVAL;
-       }
+       blk_integrity_register(mddev->gendisk,
+                              bdev_get_integrity(reference->bdev));
+
        printk(KERN_NOTICE "md: data integrity enabled on %s\n", mdname(mddev));
        if (bioset_integrity_create(mddev->bio_set, BIO_POOL_SIZE)) {
                printk(KERN_ERR "md: failed to create integrity pool for %s\n",
        printk(KERN_NOTICE "md: data integrity enabled on %s\n", mdname(mddev));
        if (bioset_integrity_create(mddev->bio_set, BIO_POOL_SIZE)) {
                printk(KERN_ERR "md: failed to create integrity pool for %s\n",
@@ -2036,6 +2033,7 @@ void md_integrity_add_rdev(struct md_rdev *rdev, struct mddev *mddev)
        if (bi_rdev && blk_integrity_compare(mddev->gendisk,
                                             rdev->bdev->bd_disk) >= 0)
                return;
        if (bi_rdev && blk_integrity_compare(mddev->gendisk,
                                             rdev->bdev->bd_disk) >= 0)
                return;
+       WARN_ON_ONCE(!mddev->suspended);
        printk(KERN_NOTICE "disabling data integrity on %s\n", mdname(mddev));
        blk_integrity_unregister(mddev->gendisk);
 }
        printk(KERN_NOTICE "disabling data integrity on %s\n", mdname(mddev));
        blk_integrity_unregister(mddev->gendisk);
 }
@@ -5666,7 +5664,6 @@ static int do_md_stop(struct mddev *mddev, int mode,
                if (mddev->hold_active == UNTIL_STOP)
                        mddev->hold_active = 0;
        }
                if (mddev->hold_active == UNTIL_STOP)
                        mddev->hold_active = 0;
        }
-       blk_integrity_unregister(disk);
        md_new_event(mddev);
        sysfs_notify_dirent_safe(mddev->sysfs_state);
        return 0;
        md_new_event(mddev);
        sysfs_notify_dirent_safe(mddev->sysfs_state);
        return 0;
@@ -8170,8 +8167,7 @@ static int remove_and_add_spares(struct mddev *mddev,
                       !test_bit(Bitmap_sync, &rdev->flags)))
                        continue;
 
                       !test_bit(Bitmap_sync, &rdev->flags)))
                        continue;
 
-               if (rdev->saved_raid_disk < 0)
-                       rdev->recovery_offset = 0;
+               rdev->recovery_offset = 0;
                if (mddev->pers->
                    hot_add_disk(mddev, rdev) == 0) {
                        if (sysfs_link_rdev(mddev, rdev))
                if (mddev->pers->
                    hot_add_disk(mddev, rdev) == 0) {
                        if (sysfs_link_rdev(mddev, rdev))