]> git.proxmox.com Git - mirror_ubuntu-artful-kernel.git/blobdiff - fs/ext4/inode.c
Merge tag 'libnvdimm-for-4.12' of git://git.kernel.org/pub/scm/linux/kernel/git/nvdim...
[mirror_ubuntu-artful-kernel.git] / fs / ext4 / inode.c
index 10b574ab354bd7060b995080dd89dd47e7fff36b..f0729b0705c710747eefb1e25360c5144eeef933 100644 (file)
@@ -3305,6 +3305,7 @@ static int ext4_releasepage(struct page *page, gfp_t wait)
 static int ext4_iomap_begin(struct inode *inode, loff_t offset, loff_t length,
                            unsigned flags, struct iomap *iomap)
 {
+       struct block_device *bdev;
        unsigned int blkbits = inode->i_blkbits;
        unsigned long first_block = offset >> blkbits;
        unsigned long last_block = (offset + length - 1) >> blkbits;
@@ -3373,7 +3374,12 @@ retry:
        }
 
        iomap->flags = 0;
-       iomap->bdev = inode->i_sb->s_bdev;
+       bdev = inode->i_sb->s_bdev;
+       iomap->bdev = bdev;
+       if (blk_queue_dax(bdev->bd_queue))
+               iomap->dax_dev = dax_get_by_host(bdev->bd_disk->disk_name);
+       else
+               iomap->dax_dev = NULL;
        iomap->offset = first_block << blkbits;
 
        if (ret == 0) {
@@ -3406,6 +3412,7 @@ static int ext4_iomap_end(struct inode *inode, loff_t offset, loff_t length,
        int blkbits = inode->i_blkbits;
        bool truncate = false;
 
+       put_dax(iomap->dax_dev);
        if (!(flags & IOMAP_WRITE) || (flags & IOMAP_FAULT))
                return 0;