Hi, This patch was originally written by Benjamin Coddington (credit where credit is due).
GFS2's inode lookup wasn't hashing the dentry when an inode wasn't found. That caused the dentry/inode to get an early cleanup attempt through dentry_kill when a create op cleaned up the filehandle. That caused the entry to hang around until unmount time, which means if the file was created then deleted, its space and inode were not reclaimed until then. This problem was introduced by gfs2's new atomic open code. The patch simply adds the d_add (as other file systems do) when inode lookups fail. Regards, Bob Peterson Red Hat File Systems Signed-off-by: Bob Peterson <rpete...@redhat.com> --- diff --git a/fs/gfs2/inode.c b/fs/gfs2/inode.c index e62e594..9317ddc 100644 --- a/fs/gfs2/inode.c +++ b/fs/gfs2/inode.c @@ -840,8 +840,10 @@ static struct dentry *__gfs2_lookup(struct inode *dir, struct dentry *dentry, int error; inode = gfs2_lookupi(dir, &dentry->d_name, 0); - if (!inode) + if (inode == NULL) { + d_add(dentry, NULL); return NULL; + } if (IS_ERR(inode)) return ERR_CAST(inode);