return;
 }
 
+void gfs2_inode_remember_delete(struct gfs2_glock *gl, u64 generation)
+{
+       struct gfs2_inode_lvb *ri = (void *)gl->gl_lksb.sb_lvbptr;
+
+       if (ri->ri_magic == 0)
+               ri->ri_magic = cpu_to_be32(GFS2_MAGIC);
+       if (ri->ri_magic == cpu_to_be32(GFS2_MAGIC))
+               ri->ri_generation_deleted = cpu_to_be64(generation);
+}
+
+bool gfs2_inode_already_deleted(struct gfs2_glock *gl, u64 generation)
+{
+       struct gfs2_inode_lvb *ri = (void *)gl->gl_lksb.sb_lvbptr;
+
+       if (ri->ri_magic != cpu_to_be32(GFS2_MAGIC))
+               return false;
+       return generation <= be64_to_cpu(ri->ri_generation_deleted);
+}
+
 static void delete_work_func(struct work_struct *work)
 {
        struct gfs2_glock *gl = container_of(work, struct gfs2_glock, gl_delete);
 
        spin_unlock(&gl->gl_lockref.lock);
 }
 
+extern void gfs2_inode_remember_delete(struct gfs2_glock *gl, u64 generation);
+extern bool gfs2_inode_already_deleted(struct gfs2_glock *gl, u64 generation);
+
 #endif /* __GLOCK_DOT_H__ */
 
        .go_lock = inode_go_lock,
        .go_dump = inode_go_dump,
        .go_type = LM_TYPE_INODE,
-       .go_flags = GLOF_ASPACE | GLOF_LRU,
+       .go_flags = GLOF_ASPACE | GLOF_LRU | GLOF_LVB,
        .go_free = inode_go_free,
 };
 
 
                goto out;
        }
 
+       if (gfs2_inode_already_deleted(ip->i_gl, ip->i_no_formal_ino))
+               goto out_truncate;
        error = gfs2_check_blk_type(sdp, ip->i_no_addr, GFS2_BLKST_UNLINKED);
        if (error)
                goto out_truncate;
           that subsequent inode creates don't see an old gl_object. */
        glock_clear_object(ip->i_gl, ip);
        error = gfs2_dinode_dealloc(ip);
+       gfs2_inode_remember_delete(ip->i_gl, ip->i_no_formal_ino);
        goto out_unlock;
 
 out_truncate:
 
 #define GFS2_RGF_NOALLOC       0x00000008
 #define GFS2_RGF_TRIMMED       0x00000010
 
+struct gfs2_inode_lvb {
+       __be32 ri_magic;
+       __be32 __pad;
+       __be64 ri_generation_deleted;
+};
+
 struct gfs2_rgrp_lvb {
        __be32 rl_magic;
        __be32 rl_flags;