diff options
author | Andreas Gruenbacher <agruenba@redhat.com> | 2024-03-28 20:46:25 +0100 |
---|---|---|
committer | Andreas Gruenbacher <agruenba@redhat.com> | 2024-05-29 15:34:55 +0200 |
commit | 713f8834389f4b34bc8b449412202543c8b32214 (patch) | |
tree | 3fd04cf01fd5ef0343f6cbaaaf8a0f3660d913c8 | |
parent | 3f4475bf24de31cce4a0c7d1372d4ab02b1f1407 (diff) | |
download | linux-stable-713f8834389f4b34bc8b449412202543c8b32214.tar.gz linux-stable-713f8834389f4b34bc8b449412202543c8b32214.tar.bz2 linux-stable-713f8834389f4b34bc8b449412202543c8b32214.zip |
gfs2: Get rid of demote_ok checks
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>
-rw-r--r-- | Documentation/filesystems/gfs2-glocks.rst | 3 | ||||
-rw-r--r-- | fs/gfs2/glock.c | 23 | ||||
-rw-r--r-- | fs/gfs2/glops.c | 18 | ||||
-rw-r--r-- | fs/gfs2/incore.h | 1 |
4 files changed, 1 insertions, 44 deletions
diff --git a/Documentation/filesystems/gfs2-glocks.rst b/Documentation/filesystems/gfs2-glocks.rst index 17ce3413608a..adc0d4c4d979 100644 --- a/Documentation/filesystems/gfs2-glocks.rst +++ b/Documentation/filesystems/gfs2-glocks.rst @@ -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 diff --git a/fs/gfs2/glock.c b/fs/gfs2/glock.c index 19f8df91b72e..7f68e3d217e6 100644 --- a/fs/gfs2/glock.c +++ b/fs/gfs2/glock.c @@ -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); diff --git a/fs/gfs2/glops.c b/fs/gfs2/glops.c index 7bc7f6785abd..95d8081681dc 100644 --- a/fs/gfs2/glops.c +++ b/fs/gfs2/glops.c @@ -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, diff --git a/fs/gfs2/incore.h b/fs/gfs2/incore.h index f75982d45635..90fd2584357a 100644 --- a/fs/gfs2/incore.h +++ b/fs/gfs2/incore.h @@ -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, |