From: "Darrick J. Wong" <djwong@kernel.org>
To: Christoph Hellwig <hch@lst.de>
Cc: Carlos Maiolino <cem@kernel.org>, linux-xfs@vger.kernel.org
Subject: Re: [PATCH 14/15] xfs: move b_li_list based retry handling to common code
Date: Mon, 6 Jan 2025 22:55:47 -0800 [thread overview]
Message-ID: <20250107065547.GE6174@frogsfrogsfrogs> (raw)
In-Reply-To: <20250106095613.847700-15-hch@lst.de>
On Mon, Jan 06, 2025 at 10:54:51AM +0100, Christoph Hellwig wrote:
> The dquot and inode version are very similar, which is expected given the
> overall b_li_list logic. The differences are that the inode version also
> clears the XFS_LI_FLUSHING which is defined in common but only ever set
> by the inode item, and that the dquot version takes the ail_lock over
> the list iteration. While this seems sensible given that additions and
> removals from b_li_list are protected by the ail_lock, log items are
> only added before buffer submission, and are only removed when completing
> the buffer, so nothing can change the list when retrying a buffer.
Heh, I think that's not quite true -- I think xfs_dquot_detach_buf
actually has a bug where it needs to take the buffer lock before
detaching the dquot from the b_li_list. And I think kfence just whacked
me for that on tonight's fstests run.
But that's neither here nor there. Moving along...
> Signed-off-by: Christoph Hellwig <hch@lst.de>
> ---
> fs/xfs/xfs_buf.c | 12 ++++++------
> fs/xfs/xfs_buf_item.h | 5 -----
> fs/xfs/xfs_dquot.c | 12 ------------
> fs/xfs/xfs_inode_item.c | 12 ------------
> 4 files changed, 6 insertions(+), 35 deletions(-)
>
> diff --git a/fs/xfs/xfs_buf.c b/fs/xfs/xfs_buf.c
> index 0ad3cacfdba1..1cf5d14d0d06 100644
> --- a/fs/xfs/xfs_buf.c
> +++ b/fs/xfs/xfs_buf.c
> @@ -1288,6 +1288,7 @@ xfs_buf_ioend_handle_error(
> {
> struct xfs_mount *mp = bp->b_mount;
> struct xfs_error_cfg *cfg;
> + struct xfs_log_item *lip;
>
> /*
> * If we've already shutdown the journal because of I/O errors, there's
> @@ -1335,12 +1336,11 @@ xfs_buf_ioend_handle_error(
> }
>
> /* Still considered a transient error. Caller will schedule retries. */
> - if (bp->b_flags & _XBF_INODES)
> - xfs_buf_inode_io_fail(bp);
> - else if (bp->b_flags & _XBF_DQUOTS)
> - xfs_buf_dquot_io_fail(bp);
> - else
> - ASSERT(list_empty(&bp->b_li_list));
> + list_for_each_entry(lip, &bp->b_li_list, li_bio_list) {
> + set_bit(XFS_LI_FAILED, &lip->li_flags);
> + clear_bit(XFS_LI_FLUSHING, &lip->li_flags);
Should dquot log items be setting XFS_LI_FLUSHING?
--D
> + }
> +
> xfs_buf_ioerror(bp, 0);
> xfs_buf_relse(bp);
> return true;
> diff --git a/fs/xfs/xfs_buf_item.h b/fs/xfs/xfs_buf_item.h
> index 4d8a6aece995..8cde85259a58 100644
> --- a/fs/xfs/xfs_buf_item.h
> +++ b/fs/xfs/xfs_buf_item.h
> @@ -54,17 +54,12 @@ bool xfs_buf_item_put(struct xfs_buf_log_item *);
> void xfs_buf_item_log(struct xfs_buf_log_item *, uint, uint);
> bool xfs_buf_item_dirty_format(struct xfs_buf_log_item *);
> void xfs_buf_inode_iodone(struct xfs_buf *);
> -void xfs_buf_inode_io_fail(struct xfs_buf *bp);
> #ifdef CONFIG_XFS_QUOTA
> void xfs_buf_dquot_iodone(struct xfs_buf *);
> -void xfs_buf_dquot_io_fail(struct xfs_buf *bp);
> #else
> static inline void xfs_buf_dquot_iodone(struct xfs_buf *bp)
> {
> }
> -static inline void xfs_buf_dquot_io_fail(struct xfs_buf *bp)
> -{
> -}
> #endif /* CONFIG_XFS_QUOTA */
> void xfs_buf_iodone(struct xfs_buf *);
> bool xfs_buf_log_check_iovec(struct xfs_log_iovec *iovec);
> diff --git a/fs/xfs/xfs_dquot.c b/fs/xfs/xfs_dquot.c
> index f11d475898f2..78dde811ab16 100644
> --- a/fs/xfs/xfs_dquot.c
> +++ b/fs/xfs/xfs_dquot.c
> @@ -1229,18 +1229,6 @@ xfs_buf_dquot_iodone(
> }
> }
>
> -void
> -xfs_buf_dquot_io_fail(
> - struct xfs_buf *bp)
> -{
> - struct xfs_log_item *lip;
> -
> - spin_lock(&bp->b_mount->m_ail->ail_lock);
> - list_for_each_entry(lip, &bp->b_li_list, li_bio_list)
> - set_bit(XFS_LI_FAILED, &lip->li_flags);
> - spin_unlock(&bp->b_mount->m_ail->ail_lock);
> -}
> -
> /* Check incore dquot for errors before we flush. */
> static xfs_failaddr_t
> xfs_qm_dqflush_check(
> diff --git a/fs/xfs/xfs_inode_item.c b/fs/xfs/xfs_inode_item.c
> index 912f0b1bc3cb..4fb2e1a6ad26 100644
> --- a/fs/xfs/xfs_inode_item.c
> +++ b/fs/xfs/xfs_inode_item.c
> @@ -1023,18 +1023,6 @@ xfs_buf_inode_iodone(
> list_splice_tail(&flushed_inodes, &bp->b_li_list);
> }
>
> -void
> -xfs_buf_inode_io_fail(
> - struct xfs_buf *bp)
> -{
> - struct xfs_log_item *lip;
> -
> - list_for_each_entry(lip, &bp->b_li_list, li_bio_list) {
> - set_bit(XFS_LI_FAILED, &lip->li_flags);
> - clear_bit(XFS_LI_FLUSHING, &lip->li_flags);
> - }
> -}
> -
> /*
> * Clear the inode logging fields so no more flushes are attempted. If we are
> * on a buffer list, it is now safe to remove it because the buffer is
> --
> 2.45.2
>
>
next prev parent reply other threads:[~2025-01-07 6:55 UTC|newest]
Thread overview: 40+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-01-06 9:54 buffer cache cleanups Christoph Hellwig
2025-01-06 9:54 ` [PATCH 01/15] xfs: fix a double completion for buffers on in-memory targets Christoph Hellwig
2025-01-07 2:00 ` Darrick J. Wong
2025-01-07 6:05 ` Christoph Hellwig
2025-01-06 9:54 ` [PATCH 02/15] xfs: remove the incorrect comment above xfs_buf_free_maps Christoph Hellwig
2025-01-07 2:00 ` Darrick J. Wong
2025-01-06 9:54 ` [PATCH 03/15] xfs: remove the incorrect comment about the b_pag field Christoph Hellwig
2025-01-07 2:01 ` Darrick J. Wong
2025-01-06 9:54 ` [PATCH 04/15] xfs: move xfs_buf_iowait out of (__)xfs_buf_submit Christoph Hellwig
2025-01-07 2:02 ` Darrick J. Wong
2025-01-06 9:54 ` [PATCH 05/15] xfs: simplify xfs_buf_delwri_pushbuf Christoph Hellwig
2025-01-07 2:08 ` Darrick J. Wong
2025-01-07 6:06 ` Christoph Hellwig
2025-01-13 7:12 ` Darrick J. Wong
2025-01-06 9:54 ` [PATCH 06/15] xfs: remove xfs_buf_delwri_submit_buffers Christoph Hellwig
2025-01-07 6:31 ` Darrick J. Wong
2025-01-07 6:33 ` Christoph Hellwig
2025-01-06 9:54 ` [PATCH 07/15] xfs: move write verification out of _xfs_buf_ioapply Christoph Hellwig
2025-01-07 6:33 ` Darrick J. Wong
2025-01-06 9:54 ` [PATCH 08/15] xfs: move in-memory buftarg handling " Christoph Hellwig
2025-01-07 6:34 ` Darrick J. Wong
2025-01-06 9:54 ` [PATCH 09/15] xfs: simplify buffer I/O submission Christoph Hellwig
2025-01-07 6:42 ` Darrick J. Wong
2025-01-07 6:46 ` Christoph Hellwig
2025-01-07 6:57 ` Darrick J. Wong
2025-01-06 9:54 ` [PATCH 10/15] xfs: move invalidate_kernel_vmap_range to xfs_buf_ioend Christoph Hellwig
2025-01-07 6:42 ` Darrick J. Wong
2025-01-06 9:54 ` [PATCH 11/15] xfs: remove the extra buffer reference in xfs_buf_submit Christoph Hellwig
2025-01-13 7:13 ` Darrick J. Wong
2025-01-06 9:54 ` [PATCH 12/15] xfs: always complete the buffer inline " Christoph Hellwig
2025-01-07 6:46 ` Darrick J. Wong
2025-01-06 9:54 ` [PATCH 13/15] xfs: simplify xfsaild_resubmit_item Christoph Hellwig
2025-01-07 6:49 ` Darrick J. Wong
2025-01-06 9:54 ` [PATCH 14/15] xfs: move b_li_list based retry handling to common code Christoph Hellwig
2025-01-07 6:55 ` Darrick J. Wong [this message]
2025-01-07 7:03 ` Christoph Hellwig
2025-01-13 7:18 ` Darrick J. Wong
2025-01-06 9:54 ` [PATCH 15/15] xfs: add a b_iodone callback to struct xfs_buf Christoph Hellwig
2025-01-07 6:58 ` Darrick J. Wong
-- strict thread matches above, loose matches on Subject: below --
2025-01-13 14:12 buffer cache cleanups v2 Christoph Hellwig
2025-01-13 14:12 ` [PATCH 14/15] xfs: move b_li_list based retry handling to common code Christoph Hellwig
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20250107065547.GE6174@frogsfrogsfrogs \
--to=djwong@kernel.org \
--cc=cem@kernel.org \
--cc=hch@lst.de \
--cc=linux-xfs@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.