Merge tag 'libnvdimm-for-4.3' of git://git.kernel.org/pub/scm/linux/kernel/git/nvdimm...
[cascardo/linux.git] / drivers / block / brd.c
index 03c45c4..b9794ae 100644 (file)
@@ -331,14 +331,12 @@ static void brd_make_request(struct request_queue *q, struct bio *bio)
        struct bio_vec bvec;
        sector_t sector;
        struct bvec_iter iter;
-       int err = -EIO;
 
        sector = bio->bi_iter.bi_sector;
        if (bio_end_sector(bio) > get_capacity(bdev->bd_disk))
-               goto out;
+               goto io_error;
 
        if (unlikely(bio->bi_rw & REQ_DISCARD)) {
-               err = 0;
                discard_from_brd(brd, sector, bio->bi_iter.bi_size);
                goto out;
        }
@@ -349,15 +347,20 @@ static void brd_make_request(struct request_queue *q, struct bio *bio)
 
        bio_for_each_segment(bvec, bio, iter) {
                unsigned int len = bvec.bv_len;
+               int err;
+
                err = brd_do_bvec(brd, bvec.bv_page, len,
                                        bvec.bv_offset, rw, sector);
                if (err)
-                       break;
+                       goto io_error;
                sector += len >> SECTOR_SHIFT;
        }
 
 out:
-       bio_endio(bio, err);
+       bio_endio(bio);
+       return;
+io_error:
+       bio_io_error(bio);
 }
 
 static int brd_rw_page(struct block_device *bdev, sector_t sector,
@@ -496,7 +499,7 @@ static struct brd_device *brd_alloc(int i)
        blk_queue_physical_block_size(brd->brd_queue, PAGE_SIZE);
 
        brd->brd_queue->limits.discard_granularity = PAGE_SIZE;
-       brd->brd_queue->limits.max_discard_sectors = UINT_MAX;
+       blk_queue_max_discard_sectors(brd->brd_queue, UINT_MAX);
        brd->brd_queue->limits.discard_zeroes_data = 1;
        queue_flag_set_unlocked(QUEUE_FLAG_DISCARD, brd->brd_queue);