Merge tag 'libnvdimm-for-4.3' of git://git.kernel.org/pub/scm/linux/kernel/git/nvdimm...
[cascardo/linux.git] / drivers / nvdimm / pmem.c
index 2f885e5..b952538 100644 (file)
@@ -83,7 +83,7 @@ static void pmem_make_request(struct request_queue *q, struct bio *bio)
        if (bio_data_dir(bio))
                wmb_pmem();
 
-       bio_endio(bio, 0);
+       bio_endio(bio);
 }
 
 static int pmem_rw_page(struct block_device *bdev, sector_t sector,
@@ -148,9 +148,18 @@ static struct pmem_device *pmem_alloc(struct device *dev,
                return ERR_PTR(-EBUSY);
        }
 
-       pmem->virt_addr = memremap_pmem(dev, pmem->phys_addr, pmem->size);
-       if (!pmem->virt_addr)
-               return ERR_PTR(-ENXIO);
+       if (pmem_should_map_pages(dev)) {
+               void *addr = devm_memremap_pages(dev, res);
+
+               if (IS_ERR(addr))
+                       return addr;
+               pmem->virt_addr = (void __pmem *) addr;
+       } else {
+               pmem->virt_addr = memremap_pmem(dev, pmem->phys_addr,
+                               pmem->size);
+               if (!pmem->virt_addr)
+                       return ERR_PTR(-ENXIO);
+       }
 
        return pmem;
 }