aboutsummaryrefslogtreecommitdiffstats
path: root/fs/namei.c
diff options
context:
space:
mode:
authorSage Weil <sage@newdream.net>2011-05-24 16:06:05 -0400
committerAl Viro <viro@zeniv.linux.org.uk>2011-05-26 07:26:46 -0400
commit64252c75a2196a0cf1e0d3777143ecfe0e3ae650 (patch)
tree8534f12a507ef5aee91e302f3e54cf8a4440fc82 /fs/namei.c
parent48293699a09324d2e3c66bd53d10eed6d67937a0 (diff)
vfs: remove dget() from dentry_unhash()
This serves no useful purpose that I can discern. All callers (rename, rmdir) hold their own reference to the dentry. A quick audit of all file systems showed no relevant checks on the value of d_count in vfs_rmdir/vfs_rename_dir paths. Signed-off-by: Sage Weil <sage@newdream.net> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'fs/namei.c')
-rw-r--r--fs/namei.c5
1 files changed, 1 insertions, 4 deletions
diff --git a/fs/namei.c b/fs/namei.c
index af5119911704..8d11187a18d7 100644
--- a/fs/namei.c
+++ b/fs/namei.c
@@ -2545,10 +2545,9 @@ SYSCALL_DEFINE2(mkdir, const char __user *, pathname, int, mode)
2545 */ 2545 */
2546void dentry_unhash(struct dentry *dentry) 2546void dentry_unhash(struct dentry *dentry)
2547{ 2547{
2548 dget(dentry);
2549 shrink_dcache_parent(dentry); 2548 shrink_dcache_parent(dentry);
2550 spin_lock(&dentry->d_lock); 2549 spin_lock(&dentry->d_lock);
2551 if (dentry->d_count == 2) 2550 if (dentry->d_count == 1)
2552 __d_drop(dentry); 2551 __d_drop(dentry);
2553 spin_unlock(&dentry->d_lock); 2552 spin_unlock(&dentry->d_lock);
2554} 2553}
@@ -2575,7 +2574,6 @@ int vfs_rmdir(struct inode *dir, struct dentry *dentry)
2575 dentry->d_inode->i_flags |= S_DEAD; 2574 dentry->d_inode->i_flags |= S_DEAD;
2576 dont_mount(dentry); 2575 dont_mount(dentry);
2577 } 2576 }
2578 dput(dentry);
2579 } 2577 }
2580 } 2578 }
2581 mutex_unlock(&dentry->d_inode->i_mutex); 2579 mutex_unlock(&dentry->d_inode->i_mutex);
@@ -3002,7 +3000,6 @@ static int vfs_rename_dir(struct inode *old_dir, struct dentry *old_dentry,
3002 mutex_unlock(&target->i_mutex); 3000 mutex_unlock(&target->i_mutex);
3003 if (d_unhashed(new_dentry)) 3001 if (d_unhashed(new_dentry))
3004 d_rehash(new_dentry); 3002 d_rehash(new_dentry);
3005 dput(new_dentry);
3006 } 3003 }
3007 if (!error) 3004 if (!error)
3008 if (!(old_dir->i_sb->s_type->fs_flags & FS_RENAME_DOES_D_MOVE)) 3005 if (!(old_dir->i_sb->s_type->fs_flags & FS_RENAME_DOES_D_MOVE))