eCryptfs: Clear i_nlink in rmdir
authorTyler Hicks <tyhicks@linux.vnet.ibm.com>
Fri, 29 Apr 2011 21:26:27 +0000 (16:26 -0500)
committerWilly Tarreau <w@1wt.eu>
Sat, 17 Mar 2012 13:03:56 +0000 (14:03 +0100)
commit 07850552b92b3637fa56767b5e460b4238014447 upstream.

eCryptfs wasn't clearing the eCryptfs inode's i_nlink after a successful
vfs_rmdir() on the lower directory. This resulted in the inode evict and
destroy paths to be missed.

https://bugs.launchpad.net/ecryptfs/+bug/723518

Signed-off-by: Tyler Hicks <tyhicks@linux.vnet.ibm.com>
Signed-off-by: Colin King <colin.king@canonical.com>
Signed-off-by: Tim Gardner <tim.gardner@canonical.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Willy Tarreau <w@1wt.eu>
fs/ecryptfs/inode.c

index 086a2424d18edc18da46f18130cda435667001d8..2bf045e5b5b6ce49eea6b7dc3b955455581d7aab 100644 (file)
@@ -539,6 +539,8 @@ static int ecryptfs_rmdir(struct inode *dir, struct dentry *dentry)
        dget(lower_dentry);
        rc = vfs_rmdir(lower_dir_dentry->d_inode, lower_dentry);
        dput(lower_dentry);
+       if (!rc && dentry->d_inode)
+               clear_nlink(dentry->d_inode);
        fsstack_copy_attr_times(dir, lower_dir_dentry->d_inode);
        dir->i_nlink = lower_dir_dentry->d_inode->i_nlink;
        unlock_dir(lower_dir_dentry);