mirror of https://github.com/torvalds/linux.git
xfs: fix IOCB_NOWAIT handling in xfs_file_dio_aio_read
Direct I/O reads can also be used with RWF_NOWAIT & co. Fix the inode locking in xfs_file_dio_aio_read to take IOCB_NOWAIT into account. Signed-off-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Carlos Maiolino <cmaiolino@redhat.com> Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com> Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
This commit is contained in:
parent
ca78eee7b4
commit
7b53b868a1
|
|
@ -187,7 +187,12 @@ xfs_file_dio_aio_read(
|
||||||
|
|
||||||
file_accessed(iocb->ki_filp);
|
file_accessed(iocb->ki_filp);
|
||||||
|
|
||||||
|
if (iocb->ki_flags & IOCB_NOWAIT) {
|
||||||
|
if (!xfs_ilock_nowait(ip, XFS_IOLOCK_SHARED))
|
||||||
|
return -EAGAIN;
|
||||||
|
} else {
|
||||||
xfs_ilock(ip, XFS_IOLOCK_SHARED);
|
xfs_ilock(ip, XFS_IOLOCK_SHARED);
|
||||||
|
}
|
||||||
ret = iomap_dio_rw(iocb, to, &xfs_read_iomap_ops, NULL,
|
ret = iomap_dio_rw(iocb, to, &xfs_read_iomap_ops, NULL,
|
||||||
is_sync_kiocb(iocb));
|
is_sync_kiocb(iocb));
|
||||||
xfs_iunlock(ip, XFS_IOLOCK_SHARED);
|
xfs_iunlock(ip, XFS_IOLOCK_SHARED);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue