]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
gfs2: Get rid of demote_ok checks
authorAndreas Gruenbacher <agruenba@redhat.com>
Thu, 28 Mar 2024 19:46:25 +0000 (20:46 +0100)
committerAndreas Gruenbacher <agruenba@redhat.com>
Wed, 29 May 2024 13:34:55 +0000 (15:34 +0200)
The demote_ok glock operation is only still used to prevent the inode
glocks of the "jindex" and "rindex" directories from getting recycled
while they are still referenced by sdp->sd_jindex and sdp->sd_rindex.
However, the LRU walking code will no longer recycle glocks which are
referenced, so the demote_ok glock operation is obsolete and can be
removed.

Each of a glock's holders in the gl_holders list is holding a reference
on the glock, so when the list of holders isn't empty in demote_ok(),
the existing reference count check will already prevent the glock from
getting released.  This means that demote_ok() is obsolete as well.

Signed-off-by: Andreas Gruenbacher <agruenba@redhat.com>
Documentation/filesystems/gfs2-glocks.rst
fs/gfs2/glock.c
fs/gfs2/glops.c
fs/gfs2/incore.h

index 17ce3413608a4d00507a369f8ca6ed144d44a0a7..adc0d4c4d9798fa0725757e5dff752c1a98f09d8 100644 (file)
@@ -61,8 +61,6 @@ Field              Purpose
 go_sync            Called before remote state change (e.g. to sync dirty data)
 go_xmote_bh        Called after remote state change (e.g. to refill cache)
 go_inval           Called if remote state change requires invalidating the cache
-go_demote_ok       Returns boolean value of whether its ok to demote a glock
-                   (e.g. checks timeout, and that there is no cached data)
 go_instantiate     Called when a glock has been acquired
 go_held            Called every time a glock holder is acquired
 go_dump            Called to print content of object for debugfs file, or on
@@ -95,7 +93,6 @@ Operation        GLF_LOCK bit lock held    gl_lockref.lock spinlock held
 go_sync               Yes                       No
 go_xmote_bh           Yes                       No
 go_inval              Yes                       No
-go_demote_ok          Sometimes                 Yes
 go_instantiate        No                        No
 go_held               No                        No
 go_dump               Sometimes                 Yes
index 19f8df91b72e5a5a98408329326d28e0a47f38df..7f68e3d217e6ba0890c5794294e5a31ed157cf93 100644 (file)
@@ -216,27 +216,6 @@ struct gfs2_glock *gfs2_glock_hold(struct gfs2_glock *gl)
        return gl;
 }
 
-/**
- * demote_ok - Check to see if it's ok to unlock a glock
- * @gl: the glock
- *
- * Returns: 1 if it's ok
- */
-
-static int demote_ok(const struct gfs2_glock *gl)
-{
-       const struct gfs2_glock_operations *glops = gl->gl_ops;
-
-       if (gl->gl_state == LM_ST_UNLOCKED)
-               return 0;
-       if (!list_empty(&gl->gl_holders))
-               return 0;
-       if (glops->go_demote_ok)
-               return glops->go_demote_ok(gl);
-       return 1;
-}
-
-
 static void gfs2_glock_add_to_lru(struct gfs2_glock *gl)
 {
        spin_lock(&lru_lock);
@@ -2049,7 +2028,7 @@ add_back_to_lru:
                clear_bit(GLF_LRU, &gl->gl_flags);
                freed++;
                gl->gl_lockref.count++;
-               if (demote_ok(gl))
+               if (gl->gl_state != LM_ST_UNLOCKED)
                        request_demote(gl, LM_ST_UNLOCKED, 0, false);
                gfs2_glock_queue_work(gl, 0);
                spin_unlock(&gl->gl_lockref.lock);
index 7bc7f6785abde1105fa217e237278721f2bc1fad..95d8081681dcc1c75843ed8d84f97f3ea8667441 100644 (file)
@@ -385,23 +385,6 @@ static void inode_go_inval(struct gfs2_glock *gl, int flags)
        gfs2_clear_glop_pending(ip);
 }
 
-/**
- * inode_go_demote_ok - Check to see if it's ok to unlock an inode glock
- * @gl: the glock
- *
- * Returns: 1 if it's ok
- */
-
-static int inode_go_demote_ok(const struct gfs2_glock *gl)
-{
-       struct gfs2_sbd *sdp = gl->gl_name.ln_sbd;
-
-       if (sdp->sd_jindex == gl->gl_object || sdp->sd_rindex == gl->gl_object)
-               return 0;
-
-       return 1;
-}
-
 static int gfs2_dinode_in(struct gfs2_inode *ip, const void *buf)
 {
        struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode);
@@ -722,7 +705,6 @@ const struct gfs2_glock_operations gfs2_meta_glops = {
 const struct gfs2_glock_operations gfs2_inode_glops = {
        .go_sync = inode_go_sync,
        .go_inval = inode_go_inval,
-       .go_demote_ok = inode_go_demote_ok,
        .go_instantiate = inode_go_instantiate,
        .go_held = inode_go_held,
        .go_dump = inode_go_dump,
index f75982d456354fd3a1eee0a1e6088bfeb160d1dd..90fd2584357ad8abedf0b590c9aa3bc629393371 100644 (file)
@@ -218,7 +218,6 @@ struct gfs2_glock_operations {
        int (*go_sync) (struct gfs2_glock *gl);
        int (*go_xmote_bh)(struct gfs2_glock *gl);
        void (*go_inval) (struct gfs2_glock *gl, int flags);
-       int (*go_demote_ok) (const struct gfs2_glock *gl);
        int (*go_instantiate) (struct gfs2_glock *gl);
        int (*go_held)(struct gfs2_holder *gh);
        void (*go_dump)(struct seq_file *seq, const struct gfs2_glock *gl,