From 4fd0b08366f7d4d837034cdb180ebb13efe990ab Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Tue, 24 May 2011 13:06:11 -0700 Subject: [PATCH] --- yaml --- r: 251691 b: refs/heads/master c: 912dbc15d953791f013b0c64a8093ab0490e5f40 h: refs/heads/master i: 251689: 54b17e2a8d9a2a8bd95a16fb0e6adffc5bbe67c9 251687: 9ca4fc18a1d2983838e6e32c8e2c7667a78d7099 v: v3 --- [refs] | 2 +- trunk/fs/namei.c | 31 +++++++++++++++++-------------- 2 files changed, 18 insertions(+), 15 deletions(-) diff --git a/[refs] b/[refs] index bfd278a47a7b..55365c8486fd 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: b5afd2c406f5c6272d916fd705f44f070fbbc0ba +refs/heads/master: 912dbc15d953791f013b0c64a8093ab0490e5f40 diff --git a/trunk/fs/namei.c b/trunk/fs/namei.c index a1593baec0bd..18c3293411f1 100644 --- a/trunk/fs/namei.c +++ b/trunk/fs/namei.c @@ -2563,23 +2563,26 @@ int vfs_rmdir(struct inode *dir, struct dentry *dentry) return -EPERM; mutex_lock(&dentry->d_inode->i_mutex); + + error = -EBUSY; if (d_mountpoint(dentry)) - error = -EBUSY; - else { - error = security_inode_rmdir(dir, dentry); - if (!error) { - error = dir->i_op->rmdir(dir, dentry); - if (!error) { - dentry->d_inode->i_flags |= S_DEAD; - dont_mount(dentry); - } - } - } + goto out; + + error = security_inode_rmdir(dir, dentry); + if (error) + goto out; + + error = dir->i_op->rmdir(dir, dentry); + if (error) + goto out; + + dentry->d_inode->i_flags |= S_DEAD; + dont_mount(dentry); + +out: mutex_unlock(&dentry->d_inode->i_mutex); - if (!error) { + if (!error) d_delete(dentry); - } - return error; }