]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
xfs: move q_qlock locking into xchk_quota_item
authorChristoph Hellwig <hch@lst.de>
Mon, 10 Nov 2025 13:23:05 +0000 (14:23 +0100)
committerCarlos Maiolino <cem@kernel.org>
Tue, 11 Nov 2025 10:45:58 +0000 (11:45 +0100)
This avoids a pointless roundtrip because ilock needs to be taken first.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Darrick J. Wong <djwong@kernel.org>
Signed-off-by: Carlos Maiolino <cem@kernel.org>
fs/xfs/scrub/quota.c

index b711d36c5ec9bac2db0da015dcf020b8409daf57..5c5374c44c5a7c8223b830aa000fcd76f4edfbc1 100644 (file)
@@ -155,10 +155,7 @@ xchk_quota_item(
         * We want to validate the bmap record for the storage backing this
         * dquot, so we need to lock the dquot and the quota file.  For quota
         * operations, the locking order is first the ILOCK and then the dquot.
-        * However, dqiterate gave us a locked dquot, so drop the dquot lock to
-        * get the ILOCK.
         */
-       mutex_unlock(&dq->q_qlock);
        xchk_ilock(sc, XFS_ILOCK_SHARED);
        mutex_lock(&dq->q_qlock);
 
@@ -251,6 +248,7 @@ xchk_quota_item(
        xchk_quota_item_timer(sc, offset, &dq->q_rtb);
 
 out:
+       mutex_unlock(&dq->q_qlock);
        if (sc->sm->sm_flags & XFS_SCRUB_OFLAG_CORRUPT)
                return -ECANCELED;
 
@@ -329,9 +327,7 @@ xchk_quota(
        /* Now look for things that the quota verifiers won't complain about. */
        xchk_dqiter_init(&cursor, sc, dqtype);
        while ((error = xchk_dquot_iter(&cursor, &dq)) == 1) {
-               mutex_lock(&dq->q_qlock);
                error = xchk_quota_item(&sqi, dq);
-               mutex_unlock(&dq->q_qlock);
                xfs_qm_dqrele(dq);
                if (error)
                        break;