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);
 

Reply via email to