xfs: reduce IOCB_NOWAIT judgment for retry exclusive unaligned DIO
authorKaixu Xia <kaixuxia@tencent.com>
Sun, 22 May 2022 06:47:11 +0000 (16:47 +1000)
committerDave Chinner <david@fromorbit.com>
Sun, 22 May 2022 06:47:11 +0000 (16:47 +1000)
Retry unaligned DIO with exclusive blocking semantics only when the
IOCB_NOWAIT flag is not set. If we are doing nonblocking user I/O,
propagate the error directly.

Signed-off-by: Kaixu Xia <kaixuxia@tencent.com>
Reviewed-by: Chaitanya Kulkarni <kch@nvidia.com>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
fs/xfs/xfs_file.c

index af954a5..e2f2a3a 100644 (file)
@@ -576,9 +576,9 @@ xfs_file_dio_write_unaligned(
         * don't even bother trying the fast path in this case.
         */
        if (iocb->ki_pos > isize || iocb->ki_pos + count >= isize) {
-retry_exclusive:
                if (iocb->ki_flags & IOCB_NOWAIT)
                        return -EAGAIN;
+retry_exclusive:
                iolock = XFS_IOLOCK_EXCL;
                flags = IOMAP_DIO_FORCE_WAIT;
        }