Linux XFS filesystem development
 help / color / mirror / Atom feed
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 05/12] xfs: remove _XBF_LOGRECOVERY
Date: Fri, 24 Jul 2026 09:49:04 -0700	[thread overview]
Message-ID: <20260724164904.GS2901224@frogsfrogsfrogs> (raw)
In-Reply-To: <20260715145147.95654-6-hch@lst.de>

On Wed, Jul 15, 2026 at 04:50:58PM +0200, Christoph Hellwig wrote:
> Adding _XBF_LOGRECOVERY to every buffer write from log recovery is error
> prone.  Instead key off the behavior on log recovery being active with
> indirecting that through a flag.
> 
> Signed-off-by: Christoph Hellwig <hch@lst.de>

That makes sense.  I suppose if anyone wants to capture ftrace data
they'll see the printk log stating that we're starting and ending
recovery, right?

If yes then
Reviewed-by: "Darrick J. Wong" <djwong@kernel.org>

--D

> ---
>  fs/xfs/xfs_buf.c                |  5 ++---
>  fs/xfs/xfs_buf.h                |  4 ----
>  fs/xfs/xfs_buf_item.c           | 10 ++++++----
>  fs/xfs/xfs_buf_item_recover.c   |  3 ---
>  fs/xfs/xfs_dquot_item_recover.c |  1 -
>  fs/xfs/xfs_inode_item_recover.c |  1 -
>  fs/xfs/xfs_log_recover.c        |  5 ++---
>  7 files changed, 10 insertions(+), 19 deletions(-)
> 
> diff --git a/fs/xfs/xfs_buf.c b/fs/xfs/xfs_buf.c
> index 2cf359b4c446..d0146d4fb3d3 100644
> --- a/fs/xfs/xfs_buf.c
> +++ b/fs/xfs/xfs_buf.c
> @@ -1017,7 +1017,7 @@ xfs_buf_ioend_handle_error(
>  	 * We're not going to bother about retrying this during recovery.
>  	 * One strike!
>  	 */
> -	if (bp->b_flags & _XBF_LOGRECOVERY) {
> +	if (mp->m_log && xlog_in_recovery(mp->m_log)) {
>  		xfs_force_shutdown(mp, SHUTDOWN_META_IO_ERROR);
>  		return false;
>  	}
> @@ -1124,8 +1124,7 @@ xfs_buf_ioend(
>  			bp->b_iodone(bp);
>  	}
>  
> -	bp->b_flags &= ~(XBF_READ | XBF_WRITE | XBF_READ_AHEAD |
> -			 _XBF_LOGRECOVERY);
> +	bp->b_flags &= ~(XBF_READ | XBF_WRITE | XBF_READ_AHEAD);
>  	if (async)
>  		xfs_buf_relse(bp);
>  }
> diff --git a/fs/xfs/xfs_buf.h b/fs/xfs/xfs_buf.h
> index 79cc9c3f0254..e440f97cf3e1 100644
> --- a/fs/xfs/xfs_buf.h
> +++ b/fs/xfs/xfs_buf.h
> @@ -34,9 +34,6 @@ struct xfs_buf;
>  #define XBF_STALE	 (1u << 6) /* buffer has been staled, do not find it */
>  #define XBF_WRITE_FAIL	 (1u << 7) /* async writes have failed on this buffer */
>  
> -/* buffer type flags for write callbacks */
> -#define _XBF_LOGRECOVERY (1u << 18)/* log recovery buffer */
> -
>  /* flags used only internally */
>  #define _XBF_KMEM	 (1u << 21)/* backed by heap memory */
>  #define _XBF_DELWRI_Q	 (1u << 22)/* buffer on a delwri queue */
> @@ -61,7 +58,6 @@ typedef unsigned int xfs_buf_flags_t;
>  	{ XBF_DONE,		"DONE" }, \
>  	{ XBF_STALE,		"STALE" }, \
>  	{ XBF_WRITE_FAIL,	"WRITE_FAIL" }, \
> -	{ _XBF_LOGRECOVERY,	"LOG_RECOVERY" }, \
>  	{ _XBF_KMEM,		"KMEM" }, \
>  	{ _XBF_DELWRI_Q,	"DELWRI_Q" }, \
>  	/* The following interface flags should never be set */ \
> diff --git a/fs/xfs/xfs_buf_item.c b/fs/xfs/xfs_buf_item.c
> index 1f055cd6732e..1a4ef34af8d5 100644
> --- a/fs/xfs/xfs_buf_item.c
> +++ b/fs/xfs/xfs_buf_item.c
> @@ -1066,6 +1066,8 @@ void
>  xfs_buf_item_done(
>  	struct xfs_buf		*bp)
>  {
> +	struct xfs_buf_log_item	*bip = bp->b_log_item;
> +
>  	/*
>  	 * If we are forcibly shutting down, this may well be off the AIL
>  	 * already. That's because we simulate the log-committed callbacks to
> @@ -1078,8 +1080,8 @@ xfs_buf_item_done(
>  	 * Note that log recovery writes might have buffer items that are not on
>  	 * the AIL even when the file system is not shut down.
>  	 */
> -	xfs_trans_ail_delete(&bp->b_log_item->bli_item,
> -			     (bp->b_flags & _XBF_LOGRECOVERY) ? 0 :
> -			     SHUTDOWN_CORRUPT_INCORE);
> -	xfs_buf_item_relse(bp->b_log_item);
> +	xfs_trans_ail_delete(&bip->bli_item,
> +			     xlog_in_recovery(bip->bli_item.li_log) ?
> +			     0 : SHUTDOWN_CORRUPT_INCORE);
> +	xfs_buf_item_relse(bip);
>  }
> diff --git a/fs/xfs/xfs_buf_item_recover.c b/fs/xfs/xfs_buf_item_recover.c
> index 02b95b89d1b5..0a3ab33b0e74 100644
> --- a/fs/xfs/xfs_buf_item_recover.c
> +++ b/fs/xfs/xfs_buf_item_recover.c
> @@ -448,7 +448,6 @@ xlog_recover_validate_buf_type(
>  	if (bp->b_ops) {
>  		struct xfs_buf_log_item	*bip;
>  
> -		bp->b_flags |= _XBF_LOGRECOVERY;
>  		xfs_buf_item_init(bp, mp);
>  		bip = bp->b_log_item;
>  		bip->bli_item.li_lsn = current_lsn;
> @@ -1100,7 +1099,6 @@ xlog_recover_buf_commit_pass2(
>  			xfs_buf_lock(rtsb_bp);
>  			xfs_buf_hold(rtsb_bp);
>  			xfs_update_rtsb(rtsb_bp, bp);
> -			rtsb_bp->b_flags |= _XBF_LOGRECOVERY;
>  			xfs_buf_delwri_queue(rtsb_bp, buffer_list);
>  			xfs_buf_relse(rtsb_bp);
>  		}
> @@ -1139,7 +1137,6 @@ xlog_recover_buf_commit_pass2(
>  		error = xfs_bwrite(bp);
>  	} else {
>  		ASSERT(bp->b_mount == mp);
> -		bp->b_flags |= _XBF_LOGRECOVERY;
>  		xfs_buf_delwri_queue(bp, buffer_list);
>  	}
>  
> diff --git a/fs/xfs/xfs_dquot_item_recover.c b/fs/xfs/xfs_dquot_item_recover.c
> index fe419b28de22..d4dfe1885666 100644
> --- a/fs/xfs/xfs_dquot_item_recover.c
> +++ b/fs/xfs/xfs_dquot_item_recover.c
> @@ -168,7 +168,6 @@ xlog_recover_dquot_commit_pass2(
>  
>  	ASSERT(dq_f->qlf_size == 2);
>  	ASSERT(bp->b_mount == mp);
> -	bp->b_flags |= _XBF_LOGRECOVERY;
>  	xfs_buf_delwri_queue(bp, buffer_list);
>  
>  out_release:
> diff --git a/fs/xfs/xfs_inode_item_recover.c b/fs/xfs/xfs_inode_item_recover.c
> index 169a8fe3bf0a..1d2319ad15c5 100644
> --- a/fs/xfs/xfs_inode_item_recover.c
> +++ b/fs/xfs/xfs_inode_item_recover.c
> @@ -586,7 +586,6 @@ xlog_recover_inode_commit_pass2(
>  	}
>  
>  	ASSERT(bp->b_mount == mp);
> -	bp->b_flags |= _XBF_LOGRECOVERY;
>  	xfs_buf_delwri_queue(bp, buffer_list);
>  
>  out_release:
> diff --git a/fs/xfs/xfs_log_recover.c b/fs/xfs/xfs_log_recover.c
> index fdb011e6ef60..e7e49529658b 100644
> --- a/fs/xfs/xfs_log_recover.c
> +++ b/fs/xfs/xfs_log_recover.c
> @@ -3279,9 +3279,8 @@ xlog_do_recovery_pass(
>  			 * checkpoints at this start LSN.
>  			 *
>  			 * Note: Shutting down the filesystem will result in the
> -			 * delwri submission marking all the buffers stale,
> -			 * completing them and cleaning up _XBF_LOGRECOVERY
> -			 * state without doing any IO.
> +			 * delwri submission marking all the buffers stale and
> +			 * completing them without doing any IO.
>  			 */
>  			xlog_force_shutdown(log, SHUTDOWN_LOG_IO_ERROR);
>  		}
> -- 
> 2.53.0
> 
> 

  reply	other threads:[~2026-07-24 16:49 UTC|newest]

Thread overview: 37+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-07-15 14:50 misc buffer cache improvements Christoph Hellwig
2026-07-15 14:50 ` [PATCH 01/12] xfs: don't get a pag reference in xfs_buf_get_map Christoph Hellwig
2026-07-24 16:32   ` Darrick J. Wong
2026-07-15 14:50 ` [PATCH 02/12] xfs: consolidate buffer locking " Christoph Hellwig
2026-07-16 13:12   ` Brian Foster
2026-07-17  8:59     ` Christoph Hellwig
2026-07-17 14:13       ` Brian Foster
2026-07-20  7:59         ` Christoph Hellwig
2026-07-24 16:42           ` Darrick J. Wong
2026-07-28  4:38             ` Christoph Hellwig
2026-07-15 14:50 ` [PATCH 03/12] xfs: split out a lower-level xfs_buf_get_map helper from xfs_find_get_buf Christoph Hellwig
2026-07-24 16:44   ` Darrick J. Wong
2026-07-28  4:39     ` Christoph Hellwig
2026-07-15 14:50 ` [PATCH 04/12] xfs: remove spurious XBF_DONE clearing on readahead validation failure Christoph Hellwig
2026-07-24 16:45   ` Darrick J. Wong
2026-07-15 14:50 ` [PATCH 05/12] xfs: remove _XBF_LOGRECOVERY Christoph Hellwig
2026-07-24 16:49   ` Darrick J. Wong [this message]
2026-07-28  4:39     ` Christoph Hellwig
2026-07-15 14:50 ` [PATCH 06/12] xfs: hide b_flags manipulation from code outside of xfs_buf.c Christoph Hellwig
2026-07-24 16:49   ` Darrick J. Wong
2026-07-15 14:51 ` [PATCH 07/12] xfs: use WRITE_ONCE to update b_flags Christoph Hellwig
2026-07-24 16:53   ` Darrick J. Wong
2026-07-28  4:40     ` Christoph Hellwig
2026-07-15 14:51 ` [PATCH 08/12] xfs: don't reverify buffers in xfs_buf_readahead_map Christoph Hellwig
2026-07-24 16:56   ` Darrick J. Wong
2026-07-15 14:51 ` [PATCH 09/12] xfs: use goto based error unwinding in xfs_buf_read_map Christoph Hellwig
2026-07-24 16:57   ` Darrick J. Wong
2026-07-15 14:51 ` [PATCH 10/12] xfs: merge xfs_buf_reverify into xfs_buf_read_map Christoph Hellwig
2026-07-17 14:13   ` Brian Foster
2026-07-24 16:58   ` Darrick J. Wong
2026-07-15 14:51 ` [PATCH 11/12] xfs: move buffer locking out of xfs_find_get_buf Christoph Hellwig
2026-07-24 16:59   ` Darrick J. Wong
2026-07-15 14:51 ` [PATCH 12/12] xfs: add lockless xfs_buf_readahead_map fast path Christoph Hellwig
2026-07-24 17:03   ` Darrick J. Wong
2026-07-28  4:41     ` Christoph Hellwig
2026-08-10 11:55 ` misc buffer cache improvements Carlos Maiolino
  -- strict thread matches above, loose matches on Subject: below --
2026-07-28  8:11 misc buffer cache improvements v2 Christoph Hellwig
2026-07-28  8:11 ` [PATCH 05/12] xfs: remove _XBF_LOGRECOVERY 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=20260724164904.GS2901224@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox