Lift the check for automount points into do_lookup()
authorAl Viro <viro@zeniv.linux.org.uk>
Fri, 27 May 2011 11:03:15 +0000 (07:03 -0400)
committerAl Viro <viro@zeniv.linux.org.uk>
Fri, 27 May 2011 11:03:15 +0000 (07:03 -0400)
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
fs/namei.c

index 988081424098fd880dbb662afbf360f43ad15316..1ab641f2e78ebdddff0306073ddbb0d06685f004 100644 (file)
@@ -945,9 +945,6 @@ static bool __follow_mount_rcu(struct nameidata *nd, struct path *path,
                path->dentry = mounted->mnt_root;
                nd->seq = read_seqcount_begin(&path->dentry->d_seq);
        }
-
-       if (unlikely(path->dentry->d_flags & DCACHE_NEED_AUTOMOUNT))
-               return false;
        return true;
 }
 
@@ -1164,8 +1161,11 @@ static int do_lookup(struct nameidata *nd, struct qstr *name,
                }
                path->mnt = mnt;
                path->dentry = dentry;
-               if (likely(__follow_mount_rcu(nd, path, inode)))
-                       return 0;
+               if (unlikely(!__follow_mount_rcu(nd, path, inode)))
+                       goto unlazy;
+               if (unlikely(path->dentry->d_flags & DCACHE_NEED_AUTOMOUNT))
+                       goto unlazy;
+               return 0;
 unlazy:
                if (unlazy_walk(nd, dentry))
                        return -ECHILD;