]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
xfs: move quota locking into xqcheck_commit_dquot
authorChristoph Hellwig <hch@lst.de>
Mon, 10 Nov 2025 13:23:07 +0000 (14:23 +0100)
committerCarlos Maiolino <cem@kernel.org>
Tue, 11 Nov 2025 10:45:58 +0000 (11:45 +0100)
Drop two redundant lock roundtrips by not requiring q_lock to be held on
entry and return.

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/quotacheck_repair.c

index 3013211fa6c107805e85e1b4e327ea5859ec32a8..51be8d8d261b2c6a108f685920a1348e9eb02d54 100644 (file)
@@ -52,13 +52,11 @@ xqcheck_commit_dquot(
        bool                    dirty = false;
        int                     error = 0;
 
-       /* Unlock the dquot just long enough to allocate a transaction. */
-       mutex_unlock(&dq->q_qlock);
        error = xchk_trans_alloc(xqc->sc, 0);
-       mutex_lock(&dq->q_qlock);
        if (error)
                return error;
 
+       mutex_lock(&dq->q_qlock);
        xfs_trans_dqjoin(xqc->sc->tp, dq);
 
        if (xchk_iscan_aborted(&xqc->iscan)) {
@@ -115,23 +113,12 @@ xqcheck_commit_dquot(
        if (dq->q_id)
                xfs_qm_adjust_dqtimers(dq);
        xfs_trans_log_dquot(xqc->sc->tp, dq);
-
-       /*
-        * Transaction commit unlocks the dquot, so we must re-lock it so that
-        * the caller can put the reference (which apparently requires a locked
-        * dquot).
-        */
-       error = xrep_trans_commit(xqc->sc);
-       mutex_lock(&dq->q_qlock);
-       return error;
+       return xrep_trans_commit(xqc->sc);
 
 out_unlock:
        mutex_unlock(&xqc->lock);
 out_cancel:
        xchk_trans_cancel(xqc->sc);
-
-       /* Re-lock the dquot so the caller can put the reference. */
-       mutex_lock(&dq->q_qlock);
        return error;
 }
 
@@ -155,9 +142,7 @@ xqcheck_commit_dqtype(
         */
        xchk_dqiter_init(&cursor, sc, dqtype);
        while ((error = xchk_dquot_iter(&cursor, &dq)) == 1) {
-               mutex_lock(&dq->q_qlock);
                error = xqcheck_commit_dquot(xqc, dqtype, dq);
-               mutex_unlock(&dq->q_qlock);
                xfs_qm_dqrele(dq);
                if (error)
                        break;
@@ -188,9 +173,7 @@ xqcheck_commit_dqtype(
                if (error)
                        return error;
 
-               mutex_lock(&dq->q_qlock);
                error = xqcheck_commit_dquot(xqc, dqtype, dq);
-               mutex_unlock(&dq->q_qlock);
                xfs_qm_dqrele(dq);
                if (error)
                        return error;