FAILED: patch "[PATCH] xfs: convert quotacheck to attach dquot buffers" failed to apply to 6.12-stable tree
Subsystems (2)
[email protected]
maintainerThe patch below does not apply to the 6.12-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
To reproduce the conflict and resubmit, you may use the following commands:
git fetch https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/ linux-6.12.y
git checkout FETCH_HEAD
git cherry-pick -x ca378189fdfa890a4f0622f85ee41b710bbac271
# <resolve conflicts, build, test, etc.>
git commit -s
git send-email --to '<[email protected]>' --in-reply-to '2024121557-herring-copartner-3013@gregkh' --subject-prefix 'PATCH 6.12.y' HEAD^..
Possible dependencies:
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From ca378189fdfa890a4f0622f85ee41b710bbac271 Mon Sep 17 00:00:00 2001
From: "Darrick J. Wong" <[email protected]>
Date: Mon, 2 Dec 2024 10:57:39 -0800
Subject: [PATCH] xfs: convert quotacheck to attach dquot buffers
Now that we've converted the dquot logging machinery to attach the dquot buffer to the li_buf pointer so that the AIL dqflush doesn't have to allocate or read buffers in a reclaim path, do the same for the quotacheck code so that the reclaim shrinker dqflush call doesn't have to do that either.
fs/xfs/xfs_dquot.c +3 -6
@@ -1285,11 +1285,10 @@ xfs_qm_dqflush_check(* Requires dquot flush lock, will clear the dirty flag, delete the quota log * item from the AIL, and shut down the system if something goes wrong. */ -int +static int xfs_dquot_read_buf (struct xfs_trans *tp,struct xfs_dquot *dqp, -xfs_buf_flags_t xbf_flags,struct xfs_buf **bpp) {struct xfs_mount *mp = dqp->q_mount;
@@ -1297,10 +1296,8 @@ xfs_dquot_read_buf(int error; error =xfs_trans_read_buf (mp, tp, mp->m_ddev_targp, dqp->q_blkno, - mp->m_quotainfo->qi_dqchunklen, xbf_flags, + mp->m_quotainfo->qi_dqchunklen,0 , &bp, &xfs_dquot_buf_ops); -if (error == -EAGAIN ) -return error;if (xfs_metadata_is_sick (error))xfs_dquot_mark_sick (dqp);if (error)
@@ -1334,7 +1331,7 @@ xfs_dquot_attach_buf(struct xfs_buf *bp =NULL ;spin_unlock (&qlip->qli_lock); - error =xfs_dquot_read_buf (tp, dqp,0 , &bp); + error =xfs_dquot_read_buf (tp, dqp, &bp);if (error)return error;
fs/xfs/xfs_dquot.h +0 -2
@@ -214,8 +214,6 @@ void xfs_dquot_to_disk(struct xfs_disk_dquot *ddqp, struct xfs_dquot *dqp);#define XFS_DQ_IS_DIRTY (dqp) ((dqp)->q_flags & XFS_DQFLAG_DIRTY)void xfs_qm_dqdestroy (struct xfs_dquot *dqp); -int xfs_dquot_read_buf (struct xfs_trans *tp,struct xfs_dquot *dqp, -xfs_buf_flags_t flags,struct xfs_buf **bpp);int xfs_qm_dqflush (struct xfs_dquot *dqp,struct xfs_buf *bp);void xfs_qm_dqunpin_wait (struct xfs_dquot *dqp);void xfs_qm_adjust_dqtimers (struct xfs_dquot *d);
fs/xfs/xfs_qm.c +13 -5
@@ -148,13 +148,13 @@ xfs_qm_dqpurge(* We don't care about getting disk errors here. We need * to purge this dquot anyway, so we go ahead regardless. */ - error =xfs_dquot_read_buf (NULL , dqp,XBF_TRYLOCK , &bp); + error =xfs_dquot_use_attached_buf (dqp, &bp);if (error == -EAGAIN ) {xfs_dqfunlock (dqp); dqp->q_flags &= ~XFS_DQFLAG_FREEING ; goto out_unlock; } -if (error) +if (!bp) goto out_funlock;/*
@@ -506,8 +506,8 @@ xfs_qm_dquot_isolate(/* we have to drop the LRU lock to flush the dquot */ spin_unlock (&lru->lock); - error =xfs_dquot_read_buf (NULL , dqp,XBF_TRYLOCK , &bp); -if (error) { + error =xfs_dquot_use_attached_buf (dqp, &bp); +if (!bp || error == -EAGAIN ) {xfs_dqfunlock (dqp); goto out_unlock_dirty; }
@@ -1331,6 +1331,10 @@ xfs_qm_quotacheck_dqadjust(return error; } + error =xfs_dquot_attach_buf (NULL , dqp); +if (error) +return error; +trace_xfs_dqadjust (dqp);/*
@@ -1513,9 +1517,13 @@ xfs_qm_flush_one( goto out_unlock; } - error =xfs_dquot_read_buf (NULL , dqp,XBF_TRYLOCK , &bp); + error =xfs_dquot_use_attached_buf (dqp, &bp);if (error) goto out_unlock; +if (!bp) { + error = -EFSCORRUPTED ; + goto out_unlock; + } error =xfs_qm_dqflush (dqp, bp);if (!error)