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>
                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;
 }