Merge branch 'barrier' into for-linus
[firefly-linux-kernel-4.4.55.git] / drivers / md / md.c
index 65ddc887dfd72dc97a2ace8bb4c8bbf93c8e5f94..0dc563d76b393208465e8209470ec982b88c4cbd 100644 (file)
@@ -211,9 +211,9 @@ static DEFINE_SPINLOCK(all_mddevs_lock);
                )
 
 
-static int md_fail_request (request_queue_t *q, struct bio *bio)
+static int md_fail_request (struct request_queue *q, struct bio *bio)
 {
-       bio_io_error(bio, bio->bi_size);
+       bio_io_error(bio);
        return 0;
 }
 
@@ -384,12 +384,10 @@ static void free_disk_sb(mdk_rdev_t * rdev)
 }
 
 
-static int super_written(struct bio *bio, unsigned int bytes_done, int error)
+static void super_written(struct bio *bio, int error)
 {
        mdk_rdev_t *rdev = bio->bi_private;
        mddev_t *mddev = rdev->mddev;
-       if (bio->bi_size)
-               return 1;
 
        if (error || !test_bit(BIO_UPTODATE, &bio->bi_flags)) {
                printk("md: super_written gets error=%d, uptodate=%d\n",
@@ -401,16 +399,13 @@ static int super_written(struct bio *bio, unsigned int bytes_done, int error)
        if (atomic_dec_and_test(&mddev->pending_writes))
                wake_up(&mddev->sb_wait);
        bio_put(bio);
-       return 0;
 }
 
-static int super_written_barrier(struct bio *bio, unsigned int bytes_done, int error)
+static void super_written_barrier(struct bio *bio, int error)
 {
        struct bio *bio2 = bio->bi_private;
        mdk_rdev_t *rdev = bio2->bi_private;
        mddev_t *mddev = rdev->mddev;
-       if (bio->bi_size)
-               return 1;
 
        if (!test_bit(BIO_UPTODATE, &bio->bi_flags) &&
            error == -EOPNOTSUPP) {
@@ -424,11 +419,11 @@ static int super_written_barrier(struct bio *bio, unsigned int bytes_done, int e
                spin_unlock_irqrestore(&mddev->write_lock, flags);
                wake_up(&mddev->sb_wait);
                bio_put(bio);
-               return 0;
+       } else {
+               bio_put(bio2);
+               bio->bi_private = rdev;
+               super_written(bio, error);
        }
-       bio_put(bio2);
-       bio->bi_private = rdev;
-       return super_written(bio, bytes_done, error);
 }
 
 void md_super_write(mddev_t *mddev, mdk_rdev_t *rdev,
@@ -489,13 +484,9 @@ void md_super_wait(mddev_t *mddev)
        finish_wait(&mddev->sb_wait, &wq);
 }
 
-static int bi_complete(struct bio *bio, unsigned int bytes_done, int error)
+static void bi_complete(struct bio *bio, int error)
 {
-       if (bio->bi_size)
-               return 1;
-
        complete((struct completion*)bio->bi_private);
-       return 0;
 }
 
 int sync_page_io(struct block_device *bdev, sector_t sector, int size,
@@ -3085,8 +3076,7 @@ static struct kobject *md_probe(dev_t dev, int *part, void *data)
        mddev->gendisk = disk;
        mutex_unlock(&disks_mutex);
        mddev->kobj.parent = &disk->kobj;
-       mddev->kobj.k_name = NULL;
-       snprintf(mddev->kobj.name, KOBJ_NAME_LEN, "%s", "md");
+       kobject_set_name(&mddev->kobj, "%s", "md");
        mddev->kobj.ktype = &md_ktype;
        if (kobject_register(&mddev->kobj))
                printk(KERN_WARNING "md: cannot register %s/md - name in use\n",
@@ -3473,7 +3463,6 @@ static int do_md_stop(mddev_t * mddev, int mode)
                        mddev->pers->stop(mddev);
                        mddev->queue->merge_bvec_fn = NULL;
                        mddev->queue->unplug_fn = NULL;
-                       mddev->queue->issue_flush_fn = NULL;
                        mddev->queue->backing_dev_info.congested_fn = NULL;
                        if (mddev->pers->sync_request)
                                sysfs_remove_group(&mddev->kobj, &md_redundancy_group);