diff options
author | Sage Weil <sage@newdream.net> | 2011-05-24 13:06:04 -0700 |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2011-05-26 07:26:46 -0400 |
commit | 48293699a09324d2e3c66bd53d10eed6d67937a0 (patch) | |
tree | 5554ad59665d62ebc36ed16d5e13b0badea46a69 /fs | |
parent | ea13a86463fd0c26c2c209c53dc46b8eff81bad4 (diff) | |
download | kernel-common-48293699a09324d2e3c66bd53d10eed6d67937a0.tar.gz kernel-common-48293699a09324d2e3c66bd53d10eed6d67937a0.tar.bz2 kernel-common-48293699a09324d2e3c66bd53d10eed6d67937a0.zip |
vfs: dentry_unhash immediately prior to rmdir
This presumes that there is no reason to unhash a dentry if we fail because
it is a mountpoint or the LSM check fails, and that the LSM checks do not
depend on the dentry being unhashed.
Signed-off-by: Sage Weil <sage@newdream.net>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'fs')
-rw-r--r-- | fs/namei.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/fs/namei.c b/fs/namei.c index 9f594312d486..af5119911704 100644 --- a/fs/namei.c +++ b/fs/namei.c @@ -2564,24 +2564,24 @@ int vfs_rmdir(struct inode *dir, struct dentry *dentry) return -EPERM; mutex_lock(&dentry->d_inode->i_mutex); - dentry_unhash(dentry); if (d_mountpoint(dentry)) error = -EBUSY; else { error = security_inode_rmdir(dir, dentry); if (!error) { + dentry_unhash(dentry); error = dir->i_op->rmdir(dir, dentry); if (!error) { dentry->d_inode->i_flags |= S_DEAD; dont_mount(dentry); } + dput(dentry); } } mutex_unlock(&dentry->d_inode->i_mutex); if (!error) { d_delete(dentry); } - dput(dentry); return error; } |