|
@@ -151,6 +151,9 @@ blkdev_direct_IO(struct kiocb *iocb, struct iov_iter *iter, loff_t offset)
|
|
|
struct file *file = iocb->ki_filp;
|
|
|
struct inode *inode = file->f_mapping->host;
|
|
|
|
|
|
+ if (IS_DAX(inode))
|
|
|
+ return dax_do_io(iocb, inode, iter, offset, blkdev_get_block,
|
|
|
+ NULL, DIO_SKIP_DIO_COUNT);
|
|
|
return __blockdev_direct_IO(iocb, inode, I_BDEV(inode), iter, offset,
|
|
|
blkdev_get_block, NULL, NULL,
|
|
|
DIO_SKIP_DIO_COUNT);
|
|
@@ -1173,6 +1176,7 @@ static int __blkdev_get(struct block_device *bdev, fmode_t mode, int for_part)
|
|
|
bdev->bd_disk = disk;
|
|
|
bdev->bd_queue = disk->queue;
|
|
|
bdev->bd_contains = bdev;
|
|
|
+ bdev->bd_inode->i_flags = disk->fops->direct_access ? S_DAX : 0;
|
|
|
if (!partno) {
|
|
|
ret = -ENXIO;
|
|
|
bdev->bd_part = disk_get_part(disk, partno);
|