From: Al Viro Date: Thu, 20 Nov 2014 19:23:33 +0000 (-0500) Subject: fs/namei.c: fold link_path_walk() call into path_init() X-Git-Url: https://git.stricted.de/?a=commitdiff_plain;h=d465887f9d6b692214b0edffddf150eb702d35d9;p=GitHub%2Fexynos8895%2Fandroid_kernel_samsung_universal8895.git fs/namei.c: fold link_path_walk() call into path_init() Signed-off-by: Al Viro --- 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;