]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
gfs2: Simplify refcounting in do_xmote
authorAndreas Gruenbacher <agruenba@redhat.com>
Sat, 2 Aug 2025 21:41:24 +0000 (23:41 +0200)
committerAndreas Gruenbacher <agruenba@redhat.com>
Fri, 12 Sep 2025 10:02:06 +0000 (12:02 +0200)
In do_xmote(), take the additional glock references close to where those
references are needed.  This will simplify the next commit.

Signed-off-by: Andreas Gruenbacher <agruenba@redhat.com>
Reviewed-by: Andrew Price <anprice@redhat.com>
fs/gfs2/glock.c

index f1383e9445bec8d398b9cd7332b3fd8d6b0f5757..8a7f947883cdfc1ee272cdcd298efa69fdca6044 100644 (file)
@@ -760,7 +760,6 @@ __acquires(&gl->gl_lockref.lock)
        spin_lock(&gl->gl_lockref.lock);
 
 skip_inval:
-       gl->gl_lockref.count++;
        /*
         * Check for an error encountered since we called go_sync and go_inval.
         * If so, we can't withdraw from the glock code because the withdraw
@@ -803,6 +802,7 @@ skip_inval:
                        if (!test_bit(GLF_CANCELING, &gl->gl_flags))
                                clear_bit(GLF_LOCK, &gl->gl_flags);
                        clear_bit(GLF_DEMOTE_IN_PROGRESS, &gl->gl_flags);
+                       gl->gl_lockref.count++;
                        gfs2_glock_queue_work(gl, GL_GLOCK_DFT_HOLD);
                        return;
                } else {
@@ -818,6 +818,7 @@ skip_inval:
 
                if (!ret) {
                        /* The operation will be completed asynchronously. */
+                       gl->gl_lockref.count++;
                        return;
                }
                clear_bit(GLF_PENDING_REPLY, &gl->gl_flags);
@@ -837,6 +838,7 @@ skip_inval:
 
        /* Complete the operation now. */
        finish_xmote(gl, target);
+       gl->gl_lockref.count++;
        gfs2_glock_queue_work(gl, 0);
 }