diff options
author | Tyler Hicks <tyhicks@linux.vnet.ibm.com> | 2011-04-29 17:26:27 -0400 |
---|---|---|
committer | Tyler Hicks <tyhicks@linux.vnet.ibm.com> | 2011-05-27 12:46:14 -0400 |
commit | 07850552b92b3637fa56767b5e460b4238014447 (patch) | |
tree | 2b3da6ab0f16a77492bb2d42a667f4c21d4b4f45 /fs | |
parent | 61c4f2c81c61f73549928dfd9f3e8f26aa36a8cf (diff) |
eCryptfs: Clear i_nlink in rmdir
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>
Cc: <stable@kernel.org>
Diffstat (limited to 'fs')
-rw-r--r-- | fs/ecryptfs/inode.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/fs/ecryptfs/inode.c b/fs/ecryptfs/inode.c index 4d4cc6a90cd5..94ab3c06317a 100644 --- a/fs/ecryptfs/inode.c +++ b/fs/ecryptfs/inode.c | |||
@@ -527,6 +527,8 @@ static int ecryptfs_rmdir(struct inode *dir, struct dentry *dentry) | |||
527 | dget(lower_dentry); | 527 | dget(lower_dentry); |
528 | rc = vfs_rmdir(lower_dir_dentry->d_inode, lower_dentry); | 528 | rc = vfs_rmdir(lower_dir_dentry->d_inode, lower_dentry); |
529 | dput(lower_dentry); | 529 | dput(lower_dentry); |
530 | if (!rc && dentry->d_inode) | ||
531 | clear_nlink(dentry->d_inode); | ||
530 | fsstack_copy_attr_times(dir, lower_dir_dentry->d_inode); | 532 | fsstack_copy_attr_times(dir, lower_dir_dentry->d_inode); |
531 | dir->i_nlink = lower_dir_dentry->d_inode->i_nlink; | 533 | dir->i_nlink = lower_dir_dentry->d_inode->i_nlink; |
532 | unlock_dir(lower_dir_dentry); | 534 | unlock_dir(lower_dir_dentry); |