gfs2: Minor gfs2_try_evict cleanup
authorAndreas Gruenbacher <agruenba@redhat.com>
Mon, 5 Dec 2022 21:27:38 +0000 (22:27 +0100)
committerAndreas Gruenbacher <agruenba@redhat.com>
Sat, 10 Dec 2022 12:06:04 +0000 (13:06 +0100)
In gfs2_try_evict(), when an inode can't be evicted, we are grabbing a
temporary reference on the inode glock to poke that glock.  That should
be safe, but it's easier to just grab an inode reference as we already
do earlier in this function.

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

index 6f2de8c0b2d01ac7f4275dcb9fcf97a06ea3633b..c32c25b4c37c8d3b12c52a1b43d222b6fda1df06 100644 (file)
@@ -1023,8 +1023,6 @@ static bool gfs2_try_evict(struct gfs2_glock *gl)
                ip = NULL;
        spin_unlock(&gl->gl_lockref.lock);
        if (ip) {
-               struct gfs2_glock *inode_gl = NULL;
-
                gl->gl_no_formal_ino = ip->i_no_formal_ino;
                set_bit(GIF_DEFERRED_DELETE, &ip->i_flags);
                d_prune_aliases(&ip->i_inode);
@@ -1034,14 +1032,14 @@ static bool gfs2_try_evict(struct gfs2_glock *gl)
                spin_lock(&gl->gl_lockref.lock);
                ip = gl->gl_object;
                if (ip) {
-                       inode_gl = ip->i_gl;
-                       lockref_get(&inode_gl->gl_lockref);
                        clear_bit(GIF_DEFERRED_DELETE, &ip->i_flags);
+                       if (!igrab(&ip->i_inode))
+                               ip = NULL;
                }
                spin_unlock(&gl->gl_lockref.lock);
-               if (inode_gl) {
-                       gfs2_glock_poke(inode_gl);
-                       gfs2_glock_put(inode_gl);
+               if (ip) {
+                       gfs2_glock_poke(ip->i_gl);
+                       iput(&ip->i_inode);
                }
                evicted = !ip;
        }