FAILED: patch "[PATCH] xfs: forcibly reset quota timers when upgrading to bigtime" failed to apply to 7.3-stable tree
Subsystems (2)
[email protected]
maintainerThe patch below does not apply to the 7.3-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-7.3.y
git checkout FETCH_HEAD
git cherry-pick -x 780212c8d8105eadb5f56b4c7aafb94937755582
# <resolve conflicts, build, test, etc.>
git commit -s
git send-email --to '<[email protected]>' --in-reply-to '2026110433-diaphragm-obsolete-bbe9@gregkh' --subject-prefix 'PATCH 7.3.y' 'HEAD^..'
Possible dependencies:
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 780212c8d8105eadb5f56b4c7aafb94937755582 Mon Sep 17 00:00:00 2001
From: "Darrick J. Wong" <[email protected]>
Date: Sun, 4 Oct 2026 22:56:04 -0700
Subject: [PATCH] xfs: forcibly reset quota timers when upgrading to bigtime
during repair
If we decide to upgrade a dquot to BIGTIME as part of repairing it, we should zero out the timer fields so that they are re-evaluated and reset in bigtime format instead of letting through whatever was in there before.
fs/xfs/scrub/quota_repair.c +16 -1
@@ -343,6 +343,8 @@ xrep_quota_block( bp->b_ops = &xfs_dquot_buf_ops;for (i =0 ; i < qi->qi_dqperchunk; i++, dqblk++) {struct xfs_disk_dquot *ddq = &dqblk->dd_diskdq; +bool was_bigtime = + !!(ddq->d_type &XFS_DQTYPE_BIGTIME );trace_xrep_disk_dquot (sc->mp, dqtype, id + i);
@@ -351,8 +353,21 @@ xrep_quota_block( ddq->d_type = dqtype; ddq->d_id =cpu_to_be32 (id + i); -if (xfs_has_bigtime (sc->mp) && ddq->d_id) +if (xfs_has_bigtime (sc->mp) && ddq->d_id) { +/* +* If something was broken with this dquot and it was a +* non-bigtime dquot, we'll grant everyone a fresh +* grace period by zeroing the timer field rather than +* try to interpret what might be garbage. +*/ +if (!was_bigtime) { + ddq->d_btimer =0 ; + ddq->d_itimer =0 ; + ddq->d_rtbtimer =0 ; + } + ddq->d_type |=XFS_DQTYPE_BIGTIME ; + } xrep_quota_fix_timer(sc->mp, ddq, ddq->d_blk_softlimit, ddq->d_bcount, &ddq->d_btimer,
Sasha Levin
maintainerPATCH 1/2 xfs: reinitialize dquot block if non-first dquot can't load
From: "Darrick J. Wong" <[email protected]>
[ Upstream commit faa9aa9e846332aaad78096a2cebfeafe68a7776 ]
LOLLM noticed that the early exit logic in xrep_quota_block is defective because it only looks in the first ondisk dquot for corruption that would prevent dquots from loading. We need to scan all the dquots in the block, not just the first one.
Stable-dep-of: 780212c8d810 ("xfs: forcibly reset quota timers when upgrading to bigtime during repair")
--- fs/xfs/scrub/quota_repair.c | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-)
fs/xfs/scrub/quota_repair.c +11 -5
@@ -297,7 +297,6 @@ xrep_quota_block( xfs_dqid_t id) {struct xfs_dqblk *dqblk; -struct xfs_disk_dquot *ddq;struct xfs_quotainfo *qi = sc->mp->m_quotainfo;struct xfs_def_quota *defq =xfs_get_defquota (qi, dqtype);struct xfs_buf *bp =NULL ;
@@ -319,14 +318,21 @@ xrep_quota_block(break ;case 0 : dqblk = bp->b_addr; - ddq = &dqblk[0 ].dd_diskdq; + error =0 ;/* * If there's nothing that would impede a dqiterate, we're * done. */ -if ((ddq->d_type &XFS_DQTYPE_REC_MASK ) == dqtype && - id ==be32_to_cpu (ddq->d_id)) { +for (i =0 ; i < qi->qi_dqperchunk; i++, dqblk++) { +struct xfs_disk_dquot *ddq = &dqblk->dd_diskdq; + +if ((ddq->d_type &XFS_DQTYPE_REC_MASK ) != dqtype || + id + i !=be32_to_cpu (ddq->d_id)) + error++; + } + +if (!error) {xfs_trans_brelse (sc->tp, bp);return 0 ; }
@@ -339,7 +345,7 @@ xrep_quota_block( dqblk = bp->b_addr; bp->b_ops = &xfs_dquot_buf_ops;for (i =0 ; i < qi->qi_dqperchunk; i++, dqblk++) { - ddq = &dqblk->dd_diskdq; +struct xfs_disk_dquot *ddq = &dqblk->dd_diskdq;trace_xrep_disk_dquot (sc->mp, dqtype, id + i);
Signature · 1 line
2.53.0
Sasha Levin
maintainerPATCH 2/2 xfs: forcibly reset quota timers when upgrading to bigtime during repair
From: "Darrick J. Wong" <[email protected]>
[ Upstream commit 780212c8d8105eadb5f56b4c7aafb94937755582 ]
If we decide to upgrade a dquot to BIGTIME as part of repairing it, we should zero out the timer fields so that they are re-evaluated and reset in bigtime format instead of letting through whatever was in there before.
--- fs/xfs/scrub/quota_repair.c | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-)
fs/xfs/scrub/quota_repair.c +16 -1
@@ -346,6 +346,8 @@ xrep_quota_block( bp->b_ops = &xfs_dquot_buf_ops;for (i =0 ; i < qi->qi_dqperchunk; i++, dqblk++) {struct xfs_disk_dquot *ddq = &dqblk->dd_diskdq; +bool was_bigtime = + !!(ddq->d_type &XFS_DQTYPE_BIGTIME );trace_xrep_disk_dquot (sc->mp, dqtype, id + i);
@@ -354,8 +356,21 @@ xrep_quota_block( ddq->d_type = dqtype; ddq->d_id =cpu_to_be32 (id + i); -if (xfs_has_bigtime (sc->mp) && ddq->d_id) +if (xfs_has_bigtime (sc->mp) && ddq->d_id) { +/* +* If something was broken with this dquot and it was a +* non-bigtime dquot, we'll grant everyone a fresh +* grace period by zeroing the timer field rather than +* try to interpret what might be garbage. +*/ +if (!was_bigtime) { + ddq->d_btimer =0 ; + ddq->d_itimer =0 ; + ddq->d_rtbtimer =0 ; + } + ddq->d_type |=XFS_DQTYPE_BIGTIME ; + } xrep_quota_fix_timer(sc->mp, ddq, ddq->d_blk_softlimit, ddq->d_bcount, &ddq->d_btimer,
Signature · 1 line
2.53.0