diff options
Diffstat (limited to 'fs/ecryptfs/inode.c')
-rw-r--r-- | fs/ecryptfs/inode.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/fs/ecryptfs/inode.c b/fs/ecryptfs/inode.c index 4d4cc6a90cd..bc116b9ffcf 100644 --- a/fs/ecryptfs/inode.c +++ b/fs/ecryptfs/inode.c | |||
@@ -521,12 +521,16 @@ static int ecryptfs_rmdir(struct inode *dir, struct dentry *dentry) | |||
521 | struct dentry *lower_dir_dentry; | 521 | struct dentry *lower_dir_dentry; |
522 | int rc; | 522 | int rc; |
523 | 523 | ||
524 | dentry_unhash(dentry); | ||
525 | |||
524 | lower_dentry = ecryptfs_dentry_to_lower(dentry); | 526 | lower_dentry = ecryptfs_dentry_to_lower(dentry); |
525 | dget(dentry); | 527 | dget(dentry); |
526 | lower_dir_dentry = lock_parent(lower_dentry); | 528 | lower_dir_dentry = lock_parent(lower_dentry); |
527 | dget(lower_dentry); | 529 | dget(lower_dentry); |
528 | rc = vfs_rmdir(lower_dir_dentry->d_inode, lower_dentry); | 530 | rc = vfs_rmdir(lower_dir_dentry->d_inode, lower_dentry); |
529 | dput(lower_dentry); | 531 | dput(lower_dentry); |
532 | if (!rc && dentry->d_inode) | ||
533 | clear_nlink(dentry->d_inode); | ||
530 | fsstack_copy_attr_times(dir, lower_dir_dentry->d_inode); | 534 | fsstack_copy_attr_times(dir, lower_dir_dentry->d_inode); |
531 | dir->i_nlink = lower_dir_dentry->d_inode->i_nlink; | 535 | dir->i_nlink = lower_dir_dentry->d_inode->i_nlink; |
532 | unlock_dir(lower_dir_dentry); | 536 | unlock_dir(lower_dir_dentry); |
@@ -571,6 +575,9 @@ ecryptfs_rename(struct inode *old_dir, struct dentry *old_dentry, | |||
571 | struct dentry *lower_new_dir_dentry; | 575 | struct dentry *lower_new_dir_dentry; |
572 | struct dentry *trap = NULL; | 576 | struct dentry *trap = NULL; |
573 | 577 | ||
578 | if (new_dentry->d_inode && S_ISDIR(new_dentry->d_inode->i_mode)) | ||
579 | dentry_unhash(new_dentry); | ||
580 | |||
574 | lower_old_dentry = ecryptfs_dentry_to_lower(old_dentry); | 581 | lower_old_dentry = ecryptfs_dentry_to_lower(old_dentry); |
575 | lower_new_dentry = ecryptfs_dentry_to_lower(new_dentry); | 582 | lower_new_dentry = ecryptfs_dentry_to_lower(new_dentry); |
576 | dget(lower_old_dentry); | 583 | dget(lower_old_dentry); |