gfs2: Prevent double iput for journal on error
authorBob Peterson <rpeterso@redhat.com>
Thu, 18 Aug 2022 18:32:36 +0000 (13:32 -0500)
committerAndreas Gruenbacher <agruenba@redhat.com>
Thu, 25 Aug 2022 15:10:59 +0000 (17:10 +0200)
When a gfs2 file system is withdrawn it does iput on its journal to
allow recovery from another cluster node. If it's unable to get a
replacement inode for whatever reason, the journal descriptor would
still be pointing at the evicted inode. So when unmount clears out the
list of journals, it would do a second iput referencing the pointer.
To avoid this, set the inode pointer to NULL.

Signed-off-by: Bob Peterson <rpeterso@redhat.com>
Signed-off-by: Andreas Gruenbacher <agruenba@redhat.com>
fs/gfs2/util.c

index 8241029a2a5d25a18239171bafa11edfb4982ff4..95c79a3ec1612df6e7959d76d3fc50cff131ab8e 100644 (file)
@@ -204,6 +204,7 @@ static void signal_our_withdraw(struct gfs2_sbd *sdp)
         * exception code in glock_dq.
         */
        iput(inode);
+       sdp->sd_jdesc->jd_inode = NULL;
        /*
         * Wait until the journal inode's glock is freed. This allows try locks
         * on other nodes to be successful, otherwise we remain the owner of