Commit 4e5405e5 authored by Andries E. Brouwer's avatar Andries E. Brouwer Committed by Linus Torvalds

[PATCH] namespace.c fix

Yet another one in the namespace.c series.

The code in graft_tree() used to be correct, but the code

        err = -ENOENT;
        down(&nd->dentry->d_inode->i_sem);
        if (IS_DEADDIR(nd->dentry->d_inode))
                goto out_unlock;

        spin_lock(&dcache_lock);
        if (IS_ROOT(nd->dentry) || !d_unhashed(nd->dentry)) {
		...
	}
	spin_unlock(&dcache_lock);
 out_unlock:

was made incorrect in 2.5.29 when

        err = security_sb_check_sb(mnt, nd);
        if (err)
                goto out_unlock;

was inserted.  It has happened more often that people overlooked
a preexisting setting of err.
parent cc3f8774
...@@ -486,9 +486,11 @@ static int graft_tree(struct vfsmount *mnt, struct nameidata *nd) ...@@ -486,9 +486,11 @@ static int graft_tree(struct vfsmount *mnt, struct nameidata *nd)
if (err) if (err)
goto out_unlock; goto out_unlock;
err = -ENOENT;
spin_lock(&dcache_lock); spin_lock(&dcache_lock);
if (IS_ROOT(nd->dentry) || !d_unhashed(nd->dentry)) { if (IS_ROOT(nd->dentry) || !d_unhashed(nd->dentry)) {
struct list_head head; struct list_head head;
attach_mnt(mnt, nd); attach_mnt(mnt, nd);
list_add_tail(&head, &mnt->mnt_list); list_add_tail(&head, &mnt->mnt_list);
list_splice(&head, current->namespace->list.prev); list_splice(&head, current->namespace->list.prev);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment