namei: shift interpretation of LOOKUP_FOLLOW inside should_follow_link()
authorAl Viro <viro@zeniv.linux.org.uk>
Mon, 14 Nov 2016 06:34:52 +0000 (01:34 -0500)
committerAl Viro <viro@zeniv.linux.org.uk>
Tue, 6 Dec 2016 00:11:57 +0000 (19:11 -0500)
Simplifies the arguments both for it and for walk_component()

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
fs/namei.c

index ab4caccfe3046b3d9e965034f69c733f583c077c..379168db782ba83b0ddc11402ae108a0831be4b8 100644 (file)
@@ -1737,7 +1737,7 @@ static inline int should_follow_link(struct nameidata *nd, struct path *link,
 {
        if (likely(!d_is_symlink(link->dentry)))
                return 0;
-       if (!follow)
+       if (!follow && !(nd->flags & LOOKUP_FOLLOW))
                return 0;
        /* make sure that d_is_symlink above matches inode */
        if (nd->flags & LOOKUP_RCU) {
@@ -2248,12 +2248,7 @@ static inline int lookup_last(struct nameidata *nd)
                nd->flags |= LOOKUP_FOLLOW | LOOKUP_DIRECTORY;
 
        nd->flags &= ~LOOKUP_PARENT;
-       return walk_component(nd,
-                       nd->flags & LOOKUP_FOLLOW
-                               ? nd->depth
-                                       ? WALK_PUT | WALK_GET
-                                       : WALK_GET
-                               : 0);
+       return walk_component(nd, nd->depth ? WALK_PUT : 0);
 }
 
 /* Returns 0 and nd will be valid on success; Retuns error, otherwise. */
@@ -2623,7 +2618,7 @@ mountpoint_last(struct nameidata *nd)
        if (nd->depth)
                put_link(nd);
        path.mnt = nd->path.mnt;
-       error = should_follow_link(nd, &path, nd->flags & LOOKUP_FOLLOW,
+       error = should_follow_link(nd, &path, 0,
                                   d_backing_inode(path.dentry), 0);
        if (unlikely(error))
                return error;
@@ -3319,8 +3314,7 @@ static int do_last(struct nameidata *nd,
 finish_lookup:
        if (nd->depth)
                put_link(nd);
-       error = should_follow_link(nd, &path, nd->flags & LOOKUP_FOLLOW,
-                                  inode, seq);
+       error = should_follow_link(nd, &path, 0, inode, seq);
        if (unlikely(error))
                return error;