diff options
author | Sage Weil <sage@newdream.net> | 2011-05-24 16:06:05 -0400 |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2011-05-26 07:26:46 -0400 |
commit | 64252c75a2196a0cf1e0d3777143ecfe0e3ae650 (patch) | |
tree | 8534f12a507ef5aee91e302f3e54cf8a4440fc82 | |
parent | 48293699a09324d2e3c66bd53d10eed6d67937a0 (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.c | 3 | ||||
-rw-r--r-- | fs/namei.c | 5 | ||||
-rw-r--r-- | fs/reiserfs/xattr.c | 1 |
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 | */ |
2546 | void dentry_unhash(struct dentry *dentry) | 2546 | void 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 | } |