diff options
author | Bob Peterson <rpeterso@redhat.com> | 2022-08-18 13:32:36 -0500 |
---|---|---|
committer | Andreas Gruenbacher <agruenba@redhat.com> | 2022-08-25 17:10:59 +0200 |
commit | 04133b607a78f2fd3daadbe5519513942b0f3a05 (patch) | |
tree | 87c33d5a8aff04a8e114e280fd14d139f2029416 | |
parent | c412a97cf6c5253fcf4ae5545be5775b2417d61b (diff) | |
download | linux-stable-04133b607a78f2fd3daadbe5519513942b0f3a05.tar.gz linux-stable-04133b607a78f2fd3daadbe5519513942b0f3a05.tar.bz2 linux-stable-04133b607a78f2fd3daadbe5519513942b0f3a05.zip |
gfs2: Prevent double iput for journal on error
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>
-rw-r--r-- | fs/gfs2/util.c | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/fs/gfs2/util.c b/fs/gfs2/util.c index 8241029a2a5d..95c79a3ec161 100644 --- a/fs/gfs2/util.c +++ b/fs/gfs2/util.c @@ -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 |