diff options
Diffstat (limited to 'fs/xfs')
-rw-r--r-- | fs/xfs/linux-2.6/xfs_aops.c | 20 |
1 files changed, 7 insertions, 13 deletions
diff --git a/fs/xfs/linux-2.6/xfs_aops.c b/fs/xfs/linux-2.6/xfs_aops.c index d798c54296eb..66abe36c1213 100644 --- a/fs/xfs/linux-2.6/xfs_aops.c +++ b/fs/xfs/linux-2.6/xfs_aops.c | |||
@@ -1474,19 +1474,13 @@ xfs_vm_direct_IO( | |||
1474 | 1474 | ||
1475 | bdev = xfs_find_bdev_for_inode(XFS_I(inode)); | 1475 | bdev = xfs_find_bdev_for_inode(XFS_I(inode)); |
1476 | 1476 | ||
1477 | if (rw == WRITE) { | 1477 | iocb->private = xfs_alloc_ioend(inode, rw == WRITE ? |
1478 | iocb->private = xfs_alloc_ioend(inode, IOMAP_UNWRITTEN); | 1478 | IOMAP_UNWRITTEN : IOMAP_READ); |
1479 | ret = blockdev_direct_IO_own_locking(rw, iocb, inode, | 1479 | |
1480 | bdev, iov, offset, nr_segs, | 1480 | ret = blockdev_direct_IO_no_locking(rw, iocb, inode, bdev, iov, |
1481 | xfs_get_blocks_direct, | 1481 | offset, nr_segs, |
1482 | xfs_end_io_direct); | 1482 | xfs_get_blocks_direct, |
1483 | } else { | 1483 | xfs_end_io_direct); |
1484 | iocb->private = xfs_alloc_ioend(inode, IOMAP_READ); | ||
1485 | ret = blockdev_direct_IO_no_locking(rw, iocb, inode, | ||
1486 | bdev, iov, offset, nr_segs, | ||
1487 | xfs_get_blocks_direct, | ||
1488 | xfs_end_io_direct); | ||
1489 | } | ||
1490 | 1484 | ||
1491 | if (unlikely(ret != -EIOCBQUEUED && iocb->private)) | 1485 | if (unlikely(ret != -EIOCBQUEUED && iocb->private)) |
1492 | xfs_destroy_ioend(iocb->private); | 1486 | xfs_destroy_ioend(iocb->private); |