From d465887f9d6b692214b0edffddf150eb702d35d9 Mon Sep 17 00:00:00 2001 From: Al Viro Date: Thu, 20 Nov 2014 14:23:33 -0500 Subject: [PATCH] fs/namei.c: fold link_path_walk() call into path_init() Signed-off-by: Al Viro --- fs/namei.c | 27 ++++++--------------------- 1 file changed, 6 insertions(+), 21 deletions(-) diff --git a/fs/namei.c b/fs/namei.c index 285001f7b84e..7241e267f769 100644 --- a/fs/namei.c +++ b/fs/namei.c @@ -1873,7 +1873,7 @@ static int path_init(int dfd, const char *name, unsigned int flags, } else { path_get(&nd->path); } - return 0; + goto done; } nd->root.mnt = NULL; @@ -1934,13 +1934,16 @@ static int path_init(int dfd, const char *name, unsigned int flags, nd->inode = nd->path.dentry->d_inode; if (!(flags & LOOKUP_RCU)) - return 0; + goto done; if (likely(!read_seqcount_retry(&nd->path.dentry->d_seq, nd->seq))) - return 0; + goto done; if (!(nd->flags & LOOKUP_ROOT)) nd->root.mnt = NULL; rcu_read_unlock(); return -ECHILD; +done: + current->total_link_count = 0; + return link_path_walk(name, nd); } static void path_cleanup(struct nameidata *nd) @@ -1984,13 +1987,6 @@ static int path_lookupat(int dfd, const char *name, * be able to complete). */ err = path_init(dfd, name, flags, nd); - - if (unlikely(err)) - goto out; - - current->total_link_count = 0; - err = link_path_walk(name, nd); - if (!err && !(flags & LOOKUP_PARENT)) { err = lookup_last(nd, &path); while (err > 0) { @@ -2018,7 +2014,6 @@ static int path_lookupat(int dfd, const char *name, } } -out: path_cleanup(nd); return err; } @@ -2333,11 +2328,6 @@ path_mountpoint(int dfd, const char *name, struct path *path, unsigned int flags if (unlikely(err)) goto out; - current->total_link_count = 0; - err = link_path_walk(name, &nd); - if (err) - goto out; - err = mountpoint_last(&nd, path); while (err > 0) { void *cookie; @@ -3224,11 +3214,6 @@ static struct file *path_openat(int dfd, struct filename *pathname, if (unlikely(error)) goto out; - current->total_link_count = 0; - error = link_path_walk(pathname->name, nd); - if (unlikely(error)) - goto out; - error = do_last(nd, &path, file, op, &opened, pathname); while (unlikely(error > 0)) { /* trailing symlink */ struct path link = path; -- 2.20.1