aboutsummaryrefslogtreecommitdiffstats
path: root/fs/namei.c
diff options
context:
space:
mode:
authorSage Weil <sage@newdream.net>2011-05-24 16:06:11 -0400
committerAl Viro <viro@zeniv.linux.org.uk>2011-05-26 07:26:51 -0400
commit912dbc15d953791f013b0c64a8093ab0490e5f40 (patch)
tree90cdea27c906f37bfc58ba909431b709c7699879 /fs/namei.c
parentb5afd2c406f5c6272d916fd705f44f070fbbc0ba (diff)
vfs: clean up vfs_rmdir
Simplify the control flow with an out label. 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.c31
1 files changed, 17 insertions, 14 deletions
diff --git a/fs/namei.c b/fs/namei.c
index a1593baec0bd..18c3293411f1 100644
--- a/fs/namei.c
+++ b/fs/namei.c
@@ -2563,23 +2563,26 @@ int vfs_rmdir(struct inode *dir, struct dentry *dentry)
2563 return -EPERM; 2563 return -EPERM;
2564 2564
2565 mutex_lock(&dentry->d_inode->i_mutex); 2565 mutex_lock(&dentry->d_inode->i_mutex);
2566
2567 error = -EBUSY;
2566 if (d_mountpoint(dentry)) 2568 if (d_mountpoint(dentry))
2567 error = -EBUSY; 2569 goto out;
2568 else { 2570
2569 error = security_inode_rmdir(dir, dentry); 2571 error = security_inode_rmdir(dir, dentry);
2570 if (!error) { 2572 if (error)
2571 error = dir->i_op->rmdir(dir, dentry); 2573 goto out;
2572 if (!error) { 2574
2573 dentry->d_inode->i_flags |= S_DEAD; 2575 error = dir->i_op->rmdir(dir, dentry);
2574 dont_mount(dentry); 2576 if (error)
2575 } 2577 goto out;
2576 } 2578
2577 } 2579 dentry->d_inode->i_flags |= S_DEAD;
2580 dont_mount(dentry);
2581
2582out:
2578 mutex_unlock(&dentry->d_inode->i_mutex); 2583 mutex_unlock(&dentry->d_inode->i_mutex);
2579 if (!error) { 2584 if (!error)
2580 d_delete(dentry); 2585 d_delete(dentry);
2581 }
2582
2583 return error; 2586 return error;
2584} 2587}
2585 2588