Commit 07681481 authored by Al Viro's avatar Al Viro

link_path_walk: split "return from recursive call" path

Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent 32cd7468
...@@ -1826,23 +1826,6 @@ static int link_path_walk(const char *name, struct nameidata *nd) ...@@ -1826,23 +1826,6 @@ static int link_path_walk(const char *name, struct nameidata *nd)
last->name = name; last->name = name;
name = s; name = s;
goto start; goto start;
back:
name = last->name;
if (unlikely(err)) {
put_link(nd, &last->link, last->cookie);
current->link_count--;
nd->depth--;
last--;
goto Err;
} else {
err = walk_component(nd, LOOKUP_FOLLOW);
put_link(nd, &last->link, last->cookie);
current->link_count--;
nd->depth--;
last--;
goto Walked;
}
} }
} }
if (!d_can_lookup(nd->path.dentry)) { if (!d_can_lookup(nd->path.dentry)) {
...@@ -1852,13 +1835,24 @@ static int link_path_walk(const char *name, struct nameidata *nd) ...@@ -1852,13 +1835,24 @@ static int link_path_walk(const char *name, struct nameidata *nd)
} }
terminate_walk(nd); terminate_walk(nd);
Err: Err:
if (likely(!nd->depth)) while (unlikely(nd->depth)) {
put_link(nd, &last->link, last->cookie);
current->link_count--;
nd->depth--;
last--;
}
return err; return err;
goto back;
OK: OK:
if (likely(!nd->depth)) if (unlikely(nd->depth)) {
name = last->name;
err = walk_component(nd, LOOKUP_FOLLOW);
put_link(nd, &last->link, last->cookie);
current->link_count--;
nd->depth--;
last--;
goto Walked;
}
return 0; return 0;
goto back;
} }
static int path_init(int dfd, const struct filename *name, unsigned int flags, static int path_init(int dfd, const struct filename *name, unsigned int flags,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment