namei: move the calls of may_follow_link() into follow_link()
authorAl Viro <viro@zeniv.linux.org.uk>
Sun, 19 Apr 2015 04:16:37 +0000 (00:16 -0400)
committerAl Viro <viro@zeniv.linux.org.uk>
Mon, 11 May 2015 02:19:53 +0000 (22:19 -0400)
All remaining callers of the former are preceded by the latter

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

index 2354d4fc0038d597b3cf938016f3563d05ec2588..f7659eebc92d4d640736784e61fb3936ddc87fb7 100644 (file)
@@ -882,9 +882,12 @@ out:
 
 static int follow_link(struct path *link, struct nameidata *nd, void **p)
 {
-       const char *s = get_link(link, nd, p);
-       int error;
-
+       const char *s;
+       int error = may_follow_link(link, nd);
+       if (unlikely(error))
+               return error;
+       nd->flags |= LOOKUP_PARENT;
+       s = get_link(link, nd, p);
        if (unlikely(IS_ERR(s)))
                return PTR_ERR(s);
        if (unlikely(!s))
@@ -2002,10 +2005,6 @@ static int path_lookupat(int dfd, const struct filename *name,
                while (err > 0) {
                        void *cookie;
                        struct path link = nd->link;
-                       err = may_follow_link(&link, nd);
-                       if (unlikely(err))
-                               break;
-                       nd->flags |= LOOKUP_PARENT;
                        err = follow_link(&link, nd, &cookie);
                        if (err)
                                break;
@@ -2352,10 +2351,6 @@ path_mountpoint(int dfd, const struct filename *name, struct path *path,
        while (err > 0) {
                void *cookie;
                struct path link = *path;
-               err = may_follow_link(&link, nd);
-               if (unlikely(err))
-                       break;
-               nd->flags |= LOOKUP_PARENT;
                err = follow_link(&link, nd, &cookie);
                if (err)
                        break;
@@ -3239,10 +3234,6 @@ static struct file *path_openat(int dfd, struct filename *pathname,
        while (unlikely(error > 0)) { /* trailing symlink */
                struct path link = nd->link;
                void *cookie;
-               error = may_follow_link(&link, nd);
-               if (unlikely(error))
-                       break;
-               nd->flags |= LOOKUP_PARENT;
                nd->flags &= ~(LOOKUP_OPEN|LOOKUP_CREATE|LOOKUP_EXCL);
                error = follow_link(&link, nd, &cookie);
                if (unlikely(error))