]> git.baikalelectronics.ru Git - kernel.git/commitdiff
xfs: fix IOCB_NOWAIT handling in xfs_file_dio_aio_read
authorChristoph Hellwig <hch@lst.de>
Wed, 5 Oct 2022 07:00:59 +0000 (12:30 +0530)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 7 Oct 2022 07:16:56 +0000 (09:16 +0200)
commit f83422f4c5acf12a1a9eac58c4974825ca765650 upstream.

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>
Acked-by: Darrick J. Wong <djwong@kernel.org>
Signed-off-by: Chandan Babu R <chandan.babu@oracle.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
fs/xfs/xfs_file.c

index 203065a647652e1e3e9c3a07e3d8b06978ebe9c6..e41c13ffa5a437c8795252399b1fd25f1fa3b140 100644 (file)
@@ -187,7 +187,12 @@ xfs_file_dio_aio_read(
 
        file_accessed(iocb->ki_filp);
 
-       xfs_ilock(ip, XFS_IOLOCK_SHARED);
+       if (iocb->ki_flags & IOCB_NOWAIT) {
+               if (!xfs_ilock_nowait(ip, XFS_IOLOCK_SHARED))
+                       return -EAGAIN;
+       } else {
+               xfs_ilock(ip, XFS_IOLOCK_SHARED);
+       }
        ret = iomap_dio_rw(iocb, to, &xfs_iomap_ops, NULL);
        xfs_iunlock(ip, XFS_IOLOCK_SHARED);