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)
last->name = name;
name = s;
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)) {
......@@ -1852,13 +1835,24 @@ static int link_path_walk(const char *name, struct nameidata *nd)
}
terminate_walk(nd);
Err:
if (likely(!nd->depth))
return err;
goto back;
while (unlikely(nd->depth)) {
put_link(nd, &last->link, last->cookie);
current->link_count--;
nd->depth--;
last--;
}
return err;
OK:
if (likely(!nd->depth))
return 0;
goto back;
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;
}
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