gfs2: Don't remember delete unless it's successful
authorBob Peterson <rpeterso@redhat.com>
Thu, 4 May 2023 18:28:51 +0000 (14:28 -0400)
committerAndreas Gruenbacher <agruenba@redhat.com>
Tue, 6 Jun 2023 16:35:06 +0000 (18:35 +0200)
This patch changes function evict_unlinked_inode so it does not call
gfs2_inode_remember_delete until it gets a good return code from
gfs2_dinode_dealloc.

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

index 925bd80..3a7e7c3 100644 (file)
@@ -1332,9 +1332,6 @@ static int evict_unlinked_inode(struct inode *inode)
                        goto out;
        }
 
-       if (ip->i_gl)
-               gfs2_inode_remember_delete(ip->i_gl, ip->i_no_formal_ino);
-
        /*
         * As soon as we clear the bitmap for the dinode, gfs2_create_inode()
         * can get called to recreate it, or even gfs2_inode_lookup() if the
@@ -1348,6 +1345,9 @@ static int evict_unlinked_inode(struct inode *inode)
         */
 
        ret = gfs2_dinode_dealloc(ip);
+       if (!ret && ip->i_gl)
+               gfs2_inode_remember_delete(ip->i_gl, ip->i_no_formal_ino);
+
 out:
        return ret;
 }