|
|
@@ -360,7 +360,13 @@ xfs_file_dio_aio_read(
|
|
|
}
|
|
|
|
|
|
data = *to;
|
|
|
- ret = mapping->a_ops->direct_IO(iocb, &data);
|
|
|
+ if (IS_DAX(inode)) {
|
|
|
+ ret = dax_do_io(iocb, inode, &data, xfs_get_blocks_direct,
|
|
|
+ NULL, 0);
|
|
|
+ } else {
|
|
|
+ ret = __blockdev_direct_IO(iocb, inode, target->bt_bdev, &data,
|
|
|
+ xfs_get_blocks_direct, NULL, NULL, 0);
|
|
|
+ }
|
|
|
if (ret > 0) {
|
|
|
iocb->ki_pos += ret;
|
|
|
iov_iter_advance(to, ret);
|
|
|
@@ -819,7 +825,14 @@ xfs_file_dio_aio_write(
|
|
|
trace_xfs_file_direct_write(ip, count, iocb->ki_pos);
|
|
|
|
|
|
data = *from;
|
|
|
- ret = mapping->a_ops->direct_IO(iocb, &data);
|
|
|
+ if (IS_DAX(inode)) {
|
|
|
+ ret = dax_do_io(iocb, inode, &data, xfs_get_blocks_direct,
|
|
|
+ xfs_end_io_direct_write, 0);
|
|
|
+ } else {
|
|
|
+ ret = __blockdev_direct_IO(iocb, inode, target->bt_bdev, &data,
|
|
|
+ xfs_get_blocks_direct, xfs_end_io_direct_write,
|
|
|
+ NULL, DIO_ASYNC_EXTEND);
|
|
|
+ }
|
|
|
|
|
|
/* see generic_file_direct_write() for why this is necessary */
|
|
|
if (mapping->nrpages) {
|