]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
gfs2: Clean up glock demote logic
authorAndreas Gruenbacher <agruenba@redhat.com>
Mon, 8 Jul 2024 19:46:16 +0000 (21:46 +0200)
committerAndreas Gruenbacher <agruenba@redhat.com>
Tue, 9 Jul 2024 08:40:03 +0000 (10:40 +0200)
The logic for determining when to demote a glock in glock_work_func(),
introduced in commit 7cf8dcd3b68a ("GFS2: Automatically adjust glock min
hold time"), doesn't make sense: inode glocks have a minimum hold time
that delays demotion, while all other glocks are expected to be demoted
immediately.  Instead of demoting non-inode glocks immediately,
glock_work_func() schedules glock work for them to be demoted, however.
Get rid of that unnecessary indirection.

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

index 7f68e3d217e6ba0890c5794294e5a31ed157cf93..12a769077ea0b36c72fb2361b466d179766620cd 100644 (file)
@@ -1091,11 +1091,13 @@ static void glock_work_func(struct work_struct *work)
        if (test_bit(GLF_PENDING_DEMOTE, &gl->gl_flags) &&
            gl->gl_state != LM_ST_UNLOCKED &&
            gl->gl_demote_state != LM_ST_EXCLUSIVE) {
-               unsigned long holdtime, now = jiffies;
+               if (gl->gl_name.ln_type == LM_TYPE_INODE) {
+                       unsigned long holdtime, now = jiffies;
 
-               holdtime = gl->gl_tchange + gl->gl_hold_time;
-               if (time_before(now, holdtime))
-                       delay = holdtime - now;
+                       holdtime = gl->gl_tchange + gl->gl_hold_time;
+                       if (time_before(now, holdtime))
+                               delay = holdtime - now;
+               }
 
                if (!delay) {
                        clear_bit(GLF_PENDING_DEMOTE, &gl->gl_flags);
@@ -1106,8 +1108,6 @@ static void glock_work_func(struct work_struct *work)
        if (delay) {
                /* Keep one glock reference for the work we requeue. */
                drop_refs--;
-               if (gl->gl_name.ln_type != LM_TYPE_INODE)
-                       delay = 0;
                gfs2_glock_queue_work(gl, delay);
        }