summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristoph Hellwig <hch@lst.de>2026-06-25 15:58:35 +0200
committerCarlos Maiolino <cem@kernel.org>2026-07-01 12:29:50 +0200
commit93e21ef2a819348fce899bd1bd1303979bba3f1d (patch)
tree5b79443a267e0a2e16f71aa6f2fcfcc533056bb1
parentb53177d418225b15d23b1817fac1b5c668e56c2f (diff)
xfs: fix handling of synchronous errors in xfs_buf_submit
Synchronous readers and writers already run __xfs_buf_ioend from xfs_buf_iowait after being woken through bp->b_iowait, so we should not call it here, which can lead to double completions. Fixes: 4b90de5bc0f5 ("xfs: reduce context switches for synchronous buffered I/O") Signed-off-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Carlos Maiolino <cmaiolino@redhat.com> Reviewed-by: "Darrick J. Wong" <djwong@kernel.org> Signed-off-by: Carlos Maiolino <cem@kernel.org>
-rw-r--r--fs/xfs/xfs_buf.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/fs/xfs/xfs_buf.c b/fs/xfs/xfs_buf.c
index f5e23c8b07b6..f18e53b60f54 100644
--- a/fs/xfs/xfs_buf.c
+++ b/fs/xfs/xfs_buf.c
@@ -1404,12 +1404,12 @@ ioerror:
bp->b_flags &= ~XBF_DONE;
xfs_buf_stale(bp);
end_io:
- if (!__xfs_buf_ioend(bp))
- return;
- if (bp->b_flags & XBF_ASYNC)
- xfs_buf_relse(bp);
- else
+ if (bp->b_flags & XBF_ASYNC) {
+ if (__xfs_buf_ioend(bp))
+ xfs_buf_relse(bp);
+ } else {
complete(&bp->b_iowait);
+ }
}
/*