aboutsummaryrefslogtreecommitdiffstats
path: root/fs/dcache.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/dcache.c')
-rw-r--r--fs/dcache.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/fs/dcache.c b/fs/dcache.c
index d5a23fd0da90..5bc72b07fde2 100644
--- a/fs/dcache.c
+++ b/fs/dcache.c
@@ -778,6 +778,7 @@ restart:
778 struct dentry *parent = lock_parent(dentry); 778 struct dentry *parent = lock_parent(dentry);
779 if (likely(!dentry->d_lockref.count)) { 779 if (likely(!dentry->d_lockref.count)) {
780 __dentry_kill(dentry); 780 __dentry_kill(dentry);
781 dput(parent);
781 goto restart; 782 goto restart;
782 } 783 }
783 if (parent) 784 if (parent)
@@ -2673,11 +2674,13 @@ struct dentry *d_splice_alias(struct inode *inode, struct dentry *dentry)
2673 if (!IS_ROOT(new)) { 2674 if (!IS_ROOT(new)) {
2674 spin_unlock(&inode->i_lock); 2675 spin_unlock(&inode->i_lock);
2675 dput(new); 2676 dput(new);
2677 iput(inode);
2676 return ERR_PTR(-EIO); 2678 return ERR_PTR(-EIO);
2677 } 2679 }
2678 if (d_ancestor(new, dentry)) { 2680 if (d_ancestor(new, dentry)) {
2679 spin_unlock(&inode->i_lock); 2681 spin_unlock(&inode->i_lock);
2680 dput(new); 2682 dput(new);
2683 iput(inode);
2681 return ERR_PTR(-EIO); 2684 return ERR_PTR(-EIO);
2682 } 2685 }
2683 write_seqlock(&rename_lock); 2686 write_seqlock(&rename_lock);