On Mon, Jan 06, 2025 at 10:54:38AM +0100, Christoph Hellwig wrote: > __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. Tempted to add: Cc: <stable@xxxxxxxxxxxxxxx> # v6.9 though I think backporting isn't strictly necessary because in-memory buffers don't have log items, right? If so, then we don't need to cc stable. Reviewed-by: "Darrick J. Wong" <djwong@xxxxxxxxxx> --D > Fixes: 5076a6040ca1 ("xfs: support in-memory buffer cache targets") > Signed-off-by: Christoph Hellwig <hch@xxxxxx> > --- > fs/xfs/xfs_buf.c | 4 +--- > 1 file changed, 1 insertion(+), 3 deletions(-) > > diff --git a/fs/xfs/xfs_buf.c b/fs/xfs/xfs_buf.c > index aa63b8efd782..787caf0c3254 100644 > --- a/fs/xfs/xfs_buf.c > +++ b/fs/xfs/xfs_buf.c > @@ -1656,10 +1656,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 > -- > 2.45.2 > >