link_path_walk: massage a bit more
authorAl Viro <viro@zeniv.linux.org.uk>
Sun, 19 Apr 2015 00:09:08 +0000 (20:09 -0400)
committerAl Viro <viro@zeniv.linux.org.uk>
Mon, 11 May 2015 02:19:56 +0000 (22:19 -0400)
Pull the block after the if-else in the end of what used to be do-while
body into all branches there.  We are almost done with the massage...

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

index 6a0dd0782c7d0bb3379208ec162527d255fcec53..b7ba71889afb9fe26bf55a5b56159e3b04ec5ad6 100644 (file)
@@ -1803,6 +1803,8 @@ loop:     /* will be gone very soon */
                        if (unlikely(!s)) {
                                /* jumped */
                                put_link(nd, &link, cookie);
+                               current->link_count--;
+                               nd->depth--;
                        } else {
                                if (*s == '/') {
                                        if (!nd->root.mnt)
@@ -1816,18 +1818,23 @@ loop:   /* will be gone very soon */
                                err = link_path_walk(s, nd);
                                if (unlikely(err)) {
                                        put_link(nd, &link, cookie);
+                                       current->link_count--;
+                                       nd->depth--;
+                                       return err;
                                } else {
                                        err = walk_component(nd, LOOKUP_FOLLOW);
                                        put_link(nd, &link, cookie);
-                                       if (err > 0)
+                                       current->link_count--;
+                                       nd->depth--;
+                                       if (err < 0)
+                                               return err;
+                                       if (err > 0) {
+                                               current->link_count++;
+                                               nd->depth++;
                                                goto loop;
+                                       }
                                }
                        }
-
-                       current->link_count--;
-                       nd->depth--;
-                       if (err)
-                               return err;
                }
                if (!d_can_lookup(nd->path.dentry)) {
                        err = -ENOTDIR;