merging pick_link() with get_link(), part 6
authorAl Viro <viro@zeniv.linux.org.uk>
Tue, 14 Jan 2020 19:26:57 +0000 (14:26 -0500)
committerAl Viro <viro@zeniv.linux.org.uk>
Sat, 14 Mar 2020 01:08:18 +0000 (21:08 -0400)
move the only remaining call of get_link() into pick_link()

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

index 2c8a814f319334f566b40277cf06a99cbe8ba109..f5959f65a70e4ff719a980de09d766b722ce687c 100644 (file)
@@ -1793,14 +1793,14 @@ static inline int handle_dots(struct nameidata *nd, int type)
        return 0;
 }
 
-static int pick_link(struct nameidata *nd, struct path *link,
+static const char *pick_link(struct nameidata *nd, struct path *link,
                     struct inode *inode, unsigned seq)
 {
        int error;
        struct saved *last;
        if (unlikely(nd->total_link_count++ >= MAXSYMLINKS)) {
                path_to_nameidata(link, nd);
-               return -ELOOP;
+               return ERR_PTR(-ELOOP);
        }
        if (!(nd->flags & LOOKUP_RCU)) {
                if (link->mnt == nd->path.mnt)
@@ -1821,7 +1821,7 @@ static int pick_link(struct nameidata *nd, struct path *link,
                }
                if (error) {
                        path_put(link);
-                       return error;
+                       return ERR_PTR(error);
                }
        }
 
@@ -1830,7 +1830,7 @@ static int pick_link(struct nameidata *nd, struct path *link,
        clear_delayed_call(&last->done);
        nd->link_inode = inode;
        last->seq = seq;
-       return 1;
+       return get_link(nd);
 }
 
 enum {WALK_FOLLOW = 1, WALK_MORE = 2, WALK_NOFOLLOW = 4};
@@ -1863,10 +1863,7 @@ static const char *step_into(struct nameidata *nd, int flags,
                if (read_seqcount_retry(&path.dentry->d_seq, seq))
                        return ERR_PTR(-ECHILD);
        }
-       err = pick_link(nd, &path, inode, seq);
-       if (err > 0)
-               return get_link(nd);
-       return ERR_PTR(err);
+       return pick_link(nd, &path, inode, seq);
 }
 
 static const char *walk_component(struct nameidata *nd, int flags)