aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorChristoph Hellwig <hch@lst.de>2025-01-13 15:12:05 +0100
committerCarlos Maiolino <cem@kernel.org>2025-01-14 11:38:14 +0100
commitcbd6883ed8662073031a32f1294cdf53c8ec24a4 (patch)
tree524209935279021dbef02efc9bf581e7e5781f97
parentxfs/libxfs: replace kmalloc() and memcpy() with kmemdup() (diff)
downloadwireguard-linux-cbd6883ed8662073031a32f1294cdf53c8ec24a4.tar.xz
wireguard-linux-cbd6883ed8662073031a32f1294cdf53c8ec24a4.zip
xfs: fix a double completion for buffers on in-memory targets
__xfs_buf_submit calls xfs_buf_ioend when b_io_remaining hits zero. For in-memory buftargs b_io_remaining is never incremented from it's initial value of 1, so this always happens. Thus the extra call to xfs_buf_ioend in _xfs_buf_ioapply causes a double completion. Fortunately __xfs_buf_submit is only used for synchronous reads on in-memory buftargs due to the peculiarities of how they work, so this is mostly harmless and just causes a little extra work to be done. Fixes: 5076a6040ca1 ("xfs: support in-memory buffer cache targets") Signed-off-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Darrick J. Wong <djwong@kernel.org> Acked-by: Dave Chinner <dchinner@redhat.com> Signed-off-by: Carlos Maiolino <cem@kernel.org>
-rw-r--r--fs/xfs/xfs_buf.c4
1 files changed, 1 insertions, 3 deletions
diff --git a/fs/xfs/xfs_buf.c b/fs/xfs/xfs_buf.c
index 6f313fbf7669..da38c18acbba 100644
--- a/fs/xfs/xfs_buf.c
+++ b/fs/xfs/xfs_buf.c
@@ -1657,10 +1657,8 @@ _xfs_buf_ioapply(
op |= REQ_META;
/* in-memory targets are directly mapped, no IO required. */
- if (xfs_buftarg_is_mem(bp->b_target)) {
- xfs_buf_ioend(bp);
+ if (xfs_buftarg_is_mem(bp->b_target))
return;
- }
/*
* Walk all the vectors issuing IO on them. Set up the initial offset