arm64: dts add Rockchip RK3328 EVB board for wifi
[firefly-linux-kernel-4.4.55.git] / drivers / md / multipath.c
index 7331a80d89f1987a42d22a2ae7510210519e6bae..dd483bb2e111ee400eee173b4a21846332e53977 100644 (file)
@@ -129,7 +129,9 @@ static void multipath_make_request(struct mddev *mddev, struct bio * bio)
        }
        multipath = conf->multipaths + mp_bh->path;
 
-       mp_bh->bio = *bio;
+       bio_init(&mp_bh->bio);
+       __bio_clone_fast(&mp_bh->bio, bio);
+
        mp_bh->bio.bi_iter.bi_sector += multipath->rdev->data_offset;
        mp_bh->bio.bi_bdev = multipath->rdev->bdev;
        mp_bh->bio.bi_rw |= REQ_FAILFAST_TRANSPORT;
@@ -257,6 +259,9 @@ static int multipath_add_disk(struct mddev *mddev, struct md_rdev *rdev)
                        disk_stack_limits(mddev->gendisk, rdev->bdev,
                                          rdev->data_offset << 9);
 
+                       err = md_integrity_add_rdev(rdev, mddev);
+                       if (err)
+                               break;
                        spin_lock_irq(&conf->device_lock);
                        mddev->degraded--;
                        rdev->raid_disk = path;
@@ -264,9 +269,6 @@ static int multipath_add_disk(struct mddev *mddev, struct md_rdev *rdev)
                        spin_unlock_irq(&conf->device_lock);
                        rcu_assign_pointer(p->rdev, rdev);
                        err = 0;
-                       mddev_suspend(mddev);
-                       md_integrity_add_rdev(rdev, mddev);
-                       mddev_resume(mddev);
                        break;
                }