]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
gfs2: run_queue cleanup
authorAndreas Gruenbacher <agruenba@redhat.com>
Mon, 11 Aug 2025 19:35:23 +0000 (21:35 +0200)
committerAndreas Gruenbacher <agruenba@redhat.com>
Fri, 12 Sep 2025 10:02:50 +0000 (12:02 +0200)
Transform the code in run_queue() to make it more readable.  No change
in functionality.

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

index 38f320e13a36e3cf007c4f18ba1c751197cd8baf..1eba27bb5f3cf754f2b736230ec2b9bd094d36fa 100644 (file)
@@ -835,8 +835,12 @@ __acquires(&gl->gl_lockref.lock)
        /* While a demote is in progress, the GLF_LOCK flag must be set. */
        GLOCK_BUG_ON(gl, test_bit(GLF_DEMOTE_IN_PROGRESS, &gl->gl_flags));
 
-       if (test_bit(GLF_DEMOTE, &gl->gl_flags) &&
-           gl->gl_demote_state != gl->gl_state) {
+       if (test_bit(GLF_DEMOTE, &gl->gl_flags)) {
+               if (gl->gl_demote_state == gl->gl_state) {
+                       gfs2_demote_wake(gl);
+                       goto promote;
+               }
+
                if (find_first_holder(gl))
                        goto out_unlock;
                if (nonblock)
@@ -846,22 +850,21 @@ __acquires(&gl->gl_lockref.lock)
                gl->gl_target = gl->gl_demote_state;
                do_xmote(gl, NULL, gl->gl_target);
                return;
-       } else {
-               if (test_bit(GLF_DEMOTE, &gl->gl_flags))
-                       gfs2_demote_wake(gl);
-               do_promote(gl);
-               if (find_first_holder(gl))
-                       goto out_unlock;
-               gh = find_first_waiter(gl);
-               if (!gh)
-                       goto out_unlock;
-               gl->gl_target = gh->gh_state;
-               if (!(gh->gh_flags & (LM_FLAG_TRY | LM_FLAG_TRY_1CB)))
-                       do_error(gl, 0); /* Fail queued try locks */
-               do_xmote(gl, gh, gl->gl_target);
-               return;
        }
 
+promote:
+       do_promote(gl);
+       if (find_first_holder(gl))
+               goto out_unlock;
+       gh = find_first_waiter(gl);
+       if (!gh)
+               goto out_unlock;
+       gl->gl_target = gh->gh_state;
+       if (!(gh->gh_flags & (LM_FLAG_TRY | LM_FLAG_TRY_1CB)))
+               do_error(gl, 0); /* Fail queued try locks */
+       do_xmote(gl, gh, gl->gl_target);
+       return;
+
 out_sched:
        clear_bit(GLF_LOCK, &gl->gl_flags);
        gl->gl_lockref.count++;