* [PATCH] xfs: abort unaligned nowait directio early
@ 2019-04-17 14:40 Darrick J. Wong
2019-04-17 15:35 ` Brian Foster
` (2 more replies)
0 siblings, 3 replies; 4+ messages in thread
From: Darrick J. Wong @ 2019-04-17 14:40 UTC (permalink / raw)
To: xfs; +Cc: Brian Foster, Dave Chinner
From: Darrick J. Wong <darrick.wong@oracle.com>
Dave Chinner noticed that xfs_file_dio_aio_write returns EAGAIN without
dropping the IOLOCK when its deciding not to wait, which means that we
leak the IOLOCK there. Since we now make unaligned directio always
wait, we have the opportunity to bail out before trying to take the
lock, which should reduce the overhead of this never-gonna-work case
considerably while also solving the dropped lock problem.
Reported-by: Dave Chinner <david@fromorbit.com>
Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
---
fs/xfs/xfs_file.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/fs/xfs/xfs_file.c b/fs/xfs/xfs_file.c
index cdcc75735521..3a45e3b0efa7 100644
--- a/fs/xfs/xfs_file.c
+++ b/fs/xfs/xfs_file.c
@@ -517,6 +517,9 @@ xfs_file_dio_aio_write(
}
if (iocb->ki_flags & IOCB_NOWAIT) {
+ /* unaligned dio always waits, bail */
+ if (unaligned_io)
+ return -EAGAIN;
if (!xfs_ilock_nowait(ip, iolock))
return -EAGAIN;
} else {
@@ -536,9 +539,6 @@ xfs_file_dio_aio_write(
* xfs_file_aio_write_checks() for other reasons.
*/
if (unaligned_io) {
- /* unaligned dio always waits, bail */
- if (iocb->ki_flags & IOCB_NOWAIT)
- return -EAGAIN;
inode_dio_wait(inode);
} else if (iolock == XFS_IOLOCK_EXCL) {
xfs_ilock_demote(ip, XFS_IOLOCK_EXCL);
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH] xfs: abort unaligned nowait directio early
2019-04-17 14:40 [PATCH] xfs: abort unaligned nowait directio early Darrick J. Wong
@ 2019-04-17 15:35 ` Brian Foster
2019-04-17 21:53 ` Dave Chinner
2019-04-23 6:22 ` Christoph Hellwig
2 siblings, 0 replies; 4+ messages in thread
From: Brian Foster @ 2019-04-17 15:35 UTC (permalink / raw)
To: Darrick J. Wong; +Cc: xfs, Dave Chinner
On Wed, Apr 17, 2019 at 07:40:06AM -0700, Darrick J. Wong wrote:
> From: Darrick J. Wong <darrick.wong@oracle.com>
>
> Dave Chinner noticed that xfs_file_dio_aio_write returns EAGAIN without
> dropping the IOLOCK when its deciding not to wait, which means that we
> leak the IOLOCK there. Since we now make unaligned directio always
> wait, we have the opportunity to bail out before trying to take the
> lock, which should reduce the overhead of this never-gonna-work case
> considerably while also solving the dropped lock problem.
>
> Reported-by: Dave Chinner <david@fromorbit.com>
> Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
> ---
Reviewed-by: Brian Foster <bfoster@redhat.com>
> fs/xfs/xfs_file.c | 6 +++---
> 1 file changed, 3 insertions(+), 3 deletions(-)
>
> diff --git a/fs/xfs/xfs_file.c b/fs/xfs/xfs_file.c
> index cdcc75735521..3a45e3b0efa7 100644
> --- a/fs/xfs/xfs_file.c
> +++ b/fs/xfs/xfs_file.c
> @@ -517,6 +517,9 @@ xfs_file_dio_aio_write(
> }
>
> if (iocb->ki_flags & IOCB_NOWAIT) {
> + /* unaligned dio always waits, bail */
> + if (unaligned_io)
> + return -EAGAIN;
> if (!xfs_ilock_nowait(ip, iolock))
> return -EAGAIN;
> } else {
> @@ -536,9 +539,6 @@ xfs_file_dio_aio_write(
> * xfs_file_aio_write_checks() for other reasons.
> */
> if (unaligned_io) {
> - /* unaligned dio always waits, bail */
> - if (iocb->ki_flags & IOCB_NOWAIT)
> - return -EAGAIN;
> inode_dio_wait(inode);
> } else if (iolock == XFS_IOLOCK_EXCL) {
> xfs_ilock_demote(ip, XFS_IOLOCK_EXCL);
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] xfs: abort unaligned nowait directio early
2019-04-17 14:40 [PATCH] xfs: abort unaligned nowait directio early Darrick J. Wong
2019-04-17 15:35 ` Brian Foster
@ 2019-04-17 21:53 ` Dave Chinner
2019-04-23 6:22 ` Christoph Hellwig
2 siblings, 0 replies; 4+ messages in thread
From: Dave Chinner @ 2019-04-17 21:53 UTC (permalink / raw)
To: Darrick J. Wong; +Cc: xfs, Brian Foster
On Wed, Apr 17, 2019 at 07:40:06AM -0700, Darrick J. Wong wrote:
> From: Darrick J. Wong <darrick.wong@oracle.com>
>
> Dave Chinner noticed that xfs_file_dio_aio_write returns EAGAIN without
> dropping the IOLOCK when its deciding not to wait, which means that we
> leak the IOLOCK there. Since we now make unaligned directio always
> wait, we have the opportunity to bail out before trying to take the
> lock, which should reduce the overhead of this never-gonna-work case
> considerably while also solving the dropped lock problem.
>
> Reported-by: Dave Chinner <david@fromorbit.com>
> Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Looks good.
Reviewed-by: Dave Chinner <dchinner@redhat.com>
--
Dave Chinner
david@fromorbit.com
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] xfs: abort unaligned nowait directio early
2019-04-17 14:40 [PATCH] xfs: abort unaligned nowait directio early Darrick J. Wong
2019-04-17 15:35 ` Brian Foster
2019-04-17 21:53 ` Dave Chinner
@ 2019-04-23 6:22 ` Christoph Hellwig
2 siblings, 0 replies; 4+ messages in thread
From: Christoph Hellwig @ 2019-04-23 6:22 UTC (permalink / raw)
To: Darrick J. Wong; +Cc: xfs, Brian Foster, Dave Chinner
On Wed, Apr 17, 2019 at 07:40:06AM -0700, Darrick J. Wong wrote:
> From: Darrick J. Wong <darrick.wong@oracle.com>
>
> Dave Chinner noticed that xfs_file_dio_aio_write returns EAGAIN without
> dropping the IOLOCK when its deciding not to wait, which means that we
> leak the IOLOCK there. Since we now make unaligned directio always
> wait, we have the opportunity to bail out before trying to take the
> lock, which should reduce the overhead of this never-gonna-work case
> considerably while also solving the dropped lock problem.
>
> Reported-by: Dave Chinner <david@fromorbit.com>
> Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Looks good,
Reviewed-by: Christoph Hellwig <hch@lst.de>
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2019-04-23 6:22 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2019-04-17 14:40 [PATCH] xfs: abort unaligned nowait directio early Darrick J. Wong
2019-04-17 15:35 ` Brian Foster
2019-04-17 21:53 ` Dave Chinner
2019-04-23 6:22 ` Christoph Hellwig
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox