clk: samsung: exynos7: add clocks for SPI block
[firefly-linux-kernel-4.4.55.git] / fs / namei.c
index 285001f7b84e86abd6f4c47f5962f15e7bc89e68..bc35b02883bb968812a7ec7cb62f4e1ff6e88de3 100644 (file)
@@ -130,7 +130,7 @@ void final_putname(struct filename *name)
 
 #define EMBEDDED_NAME_MAX      (PATH_MAX - sizeof(struct filename))
 
-static struct filename *
+struct filename *
 getname_flags(const char __user *filename, int flags, int *empty)
 {
        struct filename *result, *err;
@@ -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;