xfs: direct calls in the direct I/O path

We control both the callers and callees of ->direct_IO, so remove the
indirect calls.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
This commit is contained in:
Christoph Hellwig
2016-07-20 11:38:01 +10:00
committed by Dave Chinner
parent f1285ff0ac
commit fa8d972d05
3 changed files with 23 additions and 21 deletions

View File

@@ -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) {