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>
                        if (unlikely(!s)) {
                                /* jumped */
                                put_link(nd, &link, cookie);
+                               current->link_count--;
+                               nd->depth--;
                        } else {
                                if (*s == '/') {
                                        if (!nd->root.mnt)
                                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;