gfs2: Don't set GLF_LOCK in gfs2_dispose_glock_lru
authorAndreas Gruenbacher <agruenba@redhat.com>
Tue, 9 Apr 2024 05:11:48 +0000 (07:11 +0200)
committerAndreas Gruenbacher <agruenba@redhat.com>
Tue, 9 Apr 2024 16:35:57 +0000 (18:35 +0200)
In gfs2_dispose_glock_lru(), we want to skip glocks which are in the
process of transitioning state (as indicated by the set GLF_LOCK flag),
but we we don't need to set that flag for requesting a state transition.

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

index ed90033b9c721a5f6792525e025c831ca4c4d805..a700e424f790363268a30315b285b9d3da0b3dd4 100644 (file)
@@ -2017,14 +2017,13 @@ add_back_to_lru:
                        atomic_inc(&lru_count);
                        continue;
                }
-               if (test_and_set_bit(GLF_LOCK, &gl->gl_flags)) {
+               if (test_bit(GLF_LOCK, &gl->gl_flags)) {
                        spin_unlock(&gl->gl_lockref.lock);
                        goto add_back_to_lru;
                }
                gl->gl_lockref.count++;
                if (demote_ok(gl))
                        handle_callback(gl, LM_ST_UNLOCKED, 0, false);
-               WARN_ON(!test_and_clear_bit(GLF_LOCK, &gl->gl_flags));
                __gfs2_glock_queue_work(gl, 0);
                spin_unlock(&gl->gl_lockref.lock);
                cond_resched_lock(&lru_lock);