]> git.proxmox.com Git - mirror_ubuntu-zesty-kernel.git/blobdiff - drivers/block/brd.c
Merge tag 'libnvdimm-for-4.3' of git://git.kernel.org/pub/scm/linux/kernel/git/nvdimm...
[mirror_ubuntu-zesty-kernel.git] / drivers / block / brd.c
index 64ab4951e9d678f737423439bce5fce7b28f72fc..b9794aeeb878cc7a054be313063191399b717159 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,
@@ -371,7 +374,7 @@ static int brd_rw_page(struct block_device *bdev, sector_t sector,
 
 #ifdef CONFIG_BLK_DEV_RAM_DAX
 static long brd_direct_access(struct block_device *bdev, sector_t sector,
-                       void **kaddr, unsigned long *pfn, long size)
+                       void __pmem **kaddr, unsigned long *pfn)
 {
        struct brd_device *brd = bdev->bd_disk->private_data;
        struct page *page;
@@ -381,13 +384,9 @@ static long brd_direct_access(struct block_device *bdev, sector_t sector,
        page = brd_insert_page(brd, sector);
        if (!page)
                return -ENOSPC;
-       *kaddr = page_address(page);
+       *kaddr = (void __pmem *)page_address(page);
        *pfn = page_to_pfn(page);
 
-       /*
-        * TODO: If size > PAGE_SIZE, we could look to see if the next page in
-        * the file happens to be mapped to the next page of physical RAM.
-        */
        return PAGE_SIZE;
 }
 #else
@@ -500,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);