aboutsummaryrefslogtreecommitdiffstats
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
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>
-rw-r--r--fs/hpfs/namei.c3
-rw-r--r--fs/namei.c5
-rw-r--r--fs/reiserfs/xattr.c1
3 files changed, 1 insertions, 8 deletions
diff --git a/fs/hpfs/namei.c b/fs/hpfs/namei.c
index d5f8c8a19023..b1c72a92c14e 100644
--- a/fs/hpfs/namei.c
+++ b/fs/hpfs/namei.c
@@ -414,7 +414,6 @@ again:
414 mutex_unlock(&hpfs_i(inode)->i_parent_mutex); 414 mutex_unlock(&hpfs_i(inode)->i_parent_mutex);
415 dentry_unhash(dentry); 415 dentry_unhash(dentry);
416 if (!d_unhashed(dentry)) { 416 if (!d_unhashed(dentry)) {
417 dput(dentry);
418 hpfs_unlock(dir->i_sb); 417 hpfs_unlock(dir->i_sb);
419 return -ENOSPC; 418 return -ENOSPC;
420 } 419 }
@@ -422,7 +421,6 @@ again:
422 !S_ISREG(inode->i_mode) || 421 !S_ISREG(inode->i_mode) ||
423 get_write_access(inode)) { 422 get_write_access(inode)) {
424 d_rehash(dentry); 423 d_rehash(dentry);
425 dput(dentry);
426 } else { 424 } else {
427 struct iattr newattrs; 425 struct iattr newattrs;
428 /*printk("HPFS: truncating file before delete.\n");*/ 426 /*printk("HPFS: truncating file before delete.\n");*/
@@ -430,7 +428,6 @@ again:
430 newattrs.ia_valid = ATTR_SIZE | ATTR_CTIME; 428 newattrs.ia_valid = ATTR_SIZE | ATTR_CTIME;
431 err = notify_change(dentry, &newattrs); 429 err = notify_change(dentry, &newattrs);
432 put_write_access(inode); 430 put_write_access(inode);
433 dput(dentry);
434 if (!err) 431 if (!err)
435 goto again; 432 goto again;
436 } 433 }
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))
diff --git a/fs/reiserfs/xattr.c b/fs/reiserfs/xattr.c
index 47d2a4498b03..50f1abccd1cd 100644
--- a/fs/reiserfs/xattr.c
+++ b/fs/reiserfs/xattr.c
@@ -105,7 +105,6 @@ static int xattr_rmdir(struct inode *dir, struct dentry *dentry)
105 mutex_unlock(&dentry->d_inode->i_mutex); 105 mutex_unlock(&dentry->d_inode->i_mutex);
106 if (!error) 106 if (!error)
107 d_delete(dentry); 107 d_delete(dentry);
108 dput(dentry);
109 108
110 return error; 109 return error;
111} 110}