aboutsummaryrefslogtreecommitdiffstats
path: root/fs/namei.c
diff options
context:
space:
mode:
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