@@ -1789,7 +1789,11 @@ static int link_path_walk(const char *name, struct nameidata *nd)
return err;
}
err = 0;
- if (likely(s)) {
+ if (unlikely(!s)) {
+ /* jumped */
+ put_link(nd, &link, cookie);
+ break;
+ } else {
if (*s == '/') {
if (!nd->root.mnt)
set_root(nd);
@@ -1804,9 +1808,9 @@ static int link_path_walk(const char *name, struct nameidata *nd)
put_link(nd, &link, cookie);
break;
}
+ err = walk_component(nd, LOOKUP_FOLLOW);
+ put_link(nd, &link, cookie);
}
- err = walk_component(nd, LOOKUP_FOLLOW);
- put_link(nd, &link, cookie);
} while (err > 0);
current->link_count--;