aboutsummaryrefslogtreecommitdiffstats
path: root/fs/ext4/indirect.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/ext4/indirect.c')
-rw-r--r--fs/ext4/indirect.c18
1 files changed, 13 insertions, 5 deletions
diff --git a/fs/ext4/indirect.c b/fs/ext4/indirect.c
index 36b369697a13..6b9878a24182 100644
--- a/fs/ext4/indirect.c
+++ b/fs/ext4/indirect.c
@@ -689,14 +689,22 @@ retry:
689 inode_dio_done(inode); 689 inode_dio_done(inode);
690 goto locked; 690 goto locked;
691 } 691 }
692 ret = __blockdev_direct_IO(rw, iocb, inode, 692 if (IS_DAX(inode))
693 inode->i_sb->s_bdev, iter, offset, 693 ret = dax_do_io(rw, iocb, inode, iter, offset,
694 ext4_get_block, NULL, NULL, 0); 694 ext4_get_block, NULL, 0);
695 else
696 ret = __blockdev_direct_IO(rw, iocb, inode,
697 inode->i_sb->s_bdev, iter, offset,
698 ext4_get_block, NULL, NULL, 0);
695 inode_dio_done(inode); 699 inode_dio_done(inode);
696 } else { 700 } else {
697locked: 701locked:
698 ret = blockdev_direct_IO(rw, iocb, inode, iter, 702 if (IS_DAX(inode))
699 offset, ext4_get_block); 703 ret = dax_do_io(rw, iocb, inode, iter, offset,
704 ext4_get_block, NULL, DIO_LOCKING);
705 else
706 ret = blockdev_direct_IO(rw, iocb, inode, iter,
707 offset, ext4_get_block);
700 708
701 if (unlikely((rw & WRITE) && ret < 0)) { 709 if (unlikely((rw & WRITE) && ret < 0)) {
702 loff_t isize = i_size_read(inode); 710 loff_t isize = i_size_read(inode);