From: "Darrick J. Wong" <djwong@kernel.org>
To: Dave Chinner <david@fromorbit.com>
Cc: linux-xfs@vger.kernel.org
Subject: Re: [PATCH 6/7] xfs: AIL should be log centric
Date: Tue, 15 Mar 2022 12:39:07 -0700 [thread overview]
Message-ID: <20220315193907.GQ8224@magnolia> (raw)
In-Reply-To: <20220315064241.3133751-7-david@fromorbit.com>
On Tue, Mar 15, 2022 at 05:42:40PM +1100, Dave Chinner wrote:
> From: Dave Chinner <dchinner@redhat.com>
>
> The AIL operates purely on log items, so it is a log centric
> subsystem. Divorce it from the xfs_mount and instead have it pass
> around xlog pointers.
>
> Signed-off-by: Dave Chinner <dchinner@redhat.com>
<headnod>
Reviewed-by: Darrick J. Wong <djwong@kernel.org>
--D
> ---
> fs/xfs/xfs_trans.c | 2 +-
> fs/xfs/xfs_trans_ail.c | 26 +++++++++++++-------------
> fs/xfs/xfs_trans_priv.h | 3 ++-
> 3 files changed, 16 insertions(+), 15 deletions(-)
>
> diff --git a/fs/xfs/xfs_trans.c b/fs/xfs/xfs_trans.c
> index de87fb136b51..831d355c3258 100644
> --- a/fs/xfs/xfs_trans.c
> +++ b/fs/xfs/xfs_trans.c
> @@ -773,7 +773,7 @@ xfs_trans_committed_bulk(
> * object into the AIL as we are in a shutdown situation.
> */
> if (aborted) {
> - ASSERT(xfs_is_shutdown(ailp->ail_mount));
> + ASSERT(xlog_is_shutdown(ailp->ail_log));
> if (lip->li_ops->iop_unpin)
> lip->li_ops->iop_unpin(lip, 1);
> continue;
> diff --git a/fs/xfs/xfs_trans_ail.c b/fs/xfs/xfs_trans_ail.c
> index 1b52952097c1..c2ccb98c7bcd 100644
> --- a/fs/xfs/xfs_trans_ail.c
> +++ b/fs/xfs/xfs_trans_ail.c
> @@ -398,7 +398,7 @@ xfsaild_push_item(
> * If log item pinning is enabled, skip the push and track the item as
> * pinned. This can help induce head-behind-tail conditions.
> */
> - if (XFS_TEST_ERROR(false, ailp->ail_mount, XFS_ERRTAG_LOG_ITEM_PIN))
> + if (XFS_TEST_ERROR(false, ailp->ail_log->l_mp, XFS_ERRTAG_LOG_ITEM_PIN))
> return XFS_ITEM_PINNED;
>
> /*
> @@ -418,7 +418,7 @@ static long
> xfsaild_push(
> struct xfs_ail *ailp)
> {
> - xfs_mount_t *mp = ailp->ail_mount;
> + struct xfs_mount *mp = ailp->ail_log->l_mp;
> struct xfs_ail_cursor cur;
> struct xfs_log_item *lip;
> xfs_lsn_t lsn;
> @@ -443,7 +443,7 @@ xfsaild_push(
> ailp->ail_log_flush = 0;
>
> XFS_STATS_INC(mp, xs_push_ail_flush);
> - xlog_cil_flush(mp->m_log);
> + xlog_cil_flush(ailp->ail_log);
> }
>
> spin_lock(&ailp->ail_lock);
> @@ -632,7 +632,7 @@ xfsaild(
> * opportunity to release such buffers from the queue.
> */
> ASSERT(list_empty(&ailp->ail_buf_list) ||
> - xfs_is_shutdown(ailp->ail_mount));
> + xlog_is_shutdown(ailp->ail_log));
> xfs_buf_delwri_cancel(&ailp->ail_buf_list);
> break;
> }
> @@ -695,7 +695,7 @@ xfs_ail_push(
> struct xfs_log_item *lip;
>
> lip = xfs_ail_min(ailp);
> - if (!lip || xfs_is_shutdown(ailp->ail_mount) ||
> + if (!lip || xlog_is_shutdown(ailp->ail_log) ||
> XFS_LSN_CMP(threshold_lsn, ailp->ail_target) <= 0)
> return;
>
> @@ -751,7 +751,7 @@ xfs_ail_update_finish(
> struct xfs_ail *ailp,
> xfs_lsn_t old_lsn) __releases(ailp->ail_lock)
> {
> - struct xfs_mount *mp = ailp->ail_mount;
> + struct xlog *log = ailp->ail_log;
>
> /* if the tail lsn hasn't changed, don't do updates or wakeups. */
> if (!old_lsn || old_lsn == __xfs_ail_min_lsn(ailp)) {
> @@ -759,13 +759,13 @@ xfs_ail_update_finish(
> return;
> }
>
> - if (!xfs_is_shutdown(mp))
> - xlog_assign_tail_lsn_locked(mp);
> + if (!xlog_is_shutdown(log))
> + xlog_assign_tail_lsn_locked(log->l_mp);
>
> if (list_empty(&ailp->ail_head))
> wake_up_all(&ailp->ail_empty);
> spin_unlock(&ailp->ail_lock);
> - xfs_log_space_wake(mp);
> + xfs_log_space_wake(log->l_mp);
> }
>
> /*
> @@ -873,13 +873,13 @@ xfs_trans_ail_delete(
> int shutdown_type)
> {
> struct xfs_ail *ailp = lip->li_ailp;
> - struct xfs_mount *mp = ailp->ail_mount;
> + struct xfs_mount *mp = ailp->ail_log->l_mp;
> xfs_lsn_t tail_lsn;
>
> spin_lock(&ailp->ail_lock);
> if (!test_bit(XFS_LI_IN_AIL, &lip->li_flags)) {
> spin_unlock(&ailp->ail_lock);
> - if (shutdown_type && !xfs_is_shutdown(mp)) {
> + if (shutdown_type && !xlog_is_shutdown(ailp->ail_log)) {
> xfs_alert_tag(mp, XFS_PTAG_AILDELETE,
> "%s: attempting to delete a log item that is not in the AIL",
> __func__);
> @@ -904,7 +904,7 @@ xfs_trans_ail_init(
> if (!ailp)
> return -ENOMEM;
>
> - ailp->ail_mount = mp;
> + ailp->ail_log = mp->m_log;
> INIT_LIST_HEAD(&ailp->ail_head);
> INIT_LIST_HEAD(&ailp->ail_cursors);
> spin_lock_init(&ailp->ail_lock);
> @@ -912,7 +912,7 @@ xfs_trans_ail_init(
> init_waitqueue_head(&ailp->ail_empty);
>
> ailp->ail_task = kthread_run(xfsaild, ailp, "xfsaild/%s",
> - ailp->ail_mount->m_super->s_id);
> + mp->m_super->s_id);
> if (IS_ERR(ailp->ail_task))
> goto out_free_ailp;
>
> diff --git a/fs/xfs/xfs_trans_priv.h b/fs/xfs/xfs_trans_priv.h
> index 3004aeac9110..f0d79a9050ba 100644
> --- a/fs/xfs/xfs_trans_priv.h
> +++ b/fs/xfs/xfs_trans_priv.h
> @@ -6,6 +6,7 @@
> #ifndef __XFS_TRANS_PRIV_H__
> #define __XFS_TRANS_PRIV_H__
>
> +struct xlog;
> struct xfs_log_item;
> struct xfs_mount;
> struct xfs_trans;
> @@ -50,7 +51,7 @@ struct xfs_ail_cursor {
> * Eventually we need to drive the locking in here as well.
> */
> struct xfs_ail {
> - struct xfs_mount *ail_mount;
> + struct xlog *ail_log;
> struct task_struct *ail_task;
> struct list_head ail_head;
> xfs_lsn_t ail_target;
> --
> 2.35.1
>
next prev parent reply other threads:[~2022-03-15 19:39 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-03-15 6:42 [PATCH 0/7 v3] xfs: log recovery fixes Dave Chinner
2022-03-15 6:42 ` [PATCH 1/7] xfs: log worker needs to start before intent/unlink recovery Dave Chinner
2022-03-15 9:14 ` Chandan Babu R
2022-03-15 6:42 ` [PATCH 2/7] xfs: check buffer pin state after locking in delwri_submit Dave Chinner
2022-03-15 10:04 ` Chandan Babu R
2022-03-15 19:13 ` Darrick J. Wong
2022-03-15 21:11 ` Dave Chinner
2022-03-15 22:42 ` Darrick J. Wong
2022-03-15 6:42 ` [PATCH 3/7] xfs: xfs_ail_push_all_sync() stalls when racing with updates Dave Chinner
2022-03-15 15:14 ` Chandan Babu R
2022-03-15 19:17 ` Darrick J. Wong
2022-03-15 21:29 ` Dave Chinner
2022-03-15 6:42 ` [PATCH 4/7] xfs: async CIL flushes need pending pushes to be made stable Dave Chinner
2022-03-15 19:36 ` Darrick J. Wong
2022-03-15 21:47 ` Dave Chinner
2022-03-16 2:00 ` Darrick J. Wong
2022-03-16 10:34 ` Chandan Babu R
2022-03-16 23:24 ` Dave Chinner
2022-03-17 6:49 ` Chandan Babu R
2022-03-15 6:42 ` [PATCH 5/7] xfs: log items should have a xlog pointer, not a mount Dave Chinner
2022-03-15 19:37 ` Darrick J. Wong
2022-03-16 11:06 ` Chandan Babu R
2022-03-15 6:42 ` [PATCH 6/7] xfs: AIL should be log centric Dave Chinner
2022-03-15 19:39 ` Darrick J. Wong [this message]
2022-03-16 11:12 ` Chandan Babu R
2022-03-15 6:42 ` [PATCH 7/7] xfs: xfs_is_shutdown vs xlog_is_shutdown cage fight Dave Chinner
2022-03-15 20:03 ` Darrick J. Wong
2022-03-15 22:20 ` Dave Chinner
2022-03-16 1:22 ` Darrick J. Wong
-- strict thread matches above, loose matches on Subject: below --
2022-03-17 5:39 [PATCH 0/7 v4] xfs: log recovery fixes Dave Chinner
2022-03-17 5:39 ` [PATCH 6/7] xfs: AIL should be log centric Dave Chinner
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=20220315193907.GQ8224@magnolia \
--to=djwong@kernel.org \
--cc=david@fromorbit.com \
--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