| From 07850552b92b3637fa56767b5e460b4238014447 Mon Sep 17 00:00:00 2001 |
| From: Tyler Hicks <tyhicks@linux.vnet.ibm.com> |
| Date: Fri, 29 Apr 2011 16:26:27 -0500 |
| Subject: eCryptfs: Clear i_nlink in rmdir |
| |
| From: Tyler Hicks <tyhicks@linux.vnet.ibm.com> |
| |
| 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> |
| |
| --- |
| fs/ecryptfs/inode.c | 2 ++ |
| 1 file changed, 2 insertions(+) |
| |
| --- a/fs/ecryptfs/inode.c |
| +++ b/fs/ecryptfs/inode.c |
| @@ -575,6 +575,8 @@ static int ecryptfs_rmdir(struct inode * |
| 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); |