link_path_walk: move the OK: inside the loop
fewer labels that way; in particular, resuming after the end of nested symlink is straight-line. Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
parent
1543972678
commit
8620c238ed
1 changed files with 15 additions and 15 deletions
30
fs/namei.c
30
fs/namei.c
|
@ -1806,11 +1806,21 @@ static int link_path_walk(const char *name, struct nameidata *nd)
|
||||||
do {
|
do {
|
||||||
name++;
|
name++;
|
||||||
} while (unlikely(*name == '/'));
|
} while (unlikely(*name == '/'));
|
||||||
if (!*name)
|
if (unlikely(!*name)) {
|
||||||
goto OK;
|
OK:
|
||||||
|
/* called from path_init(), done */
|
||||||
err = walk_component(nd, LOOKUP_FOLLOW);
|
if (!nd->depth)
|
||||||
Walked:
|
return 0;
|
||||||
|
name = nd->stack[nd->depth - 1].name;
|
||||||
|
/* called from trailing_symlink(), done */
|
||||||
|
if (!name)
|
||||||
|
return 0;
|
||||||
|
/* last component of nested symlink */
|
||||||
|
err = walk_component(nd, LOOKUP_FOLLOW);
|
||||||
|
put_link(nd);
|
||||||
|
} else {
|
||||||
|
err = walk_component(nd, LOOKUP_FOLLOW);
|
||||||
|
}
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -1859,16 +1869,6 @@ Walked:
|
||||||
}
|
}
|
||||||
terminate_walk(nd);
|
terminate_walk(nd);
|
||||||
return err;
|
return err;
|
||||||
OK:
|
|
||||||
if (!nd->depth) /* called from path_init(), done */
|
|
||||||
return 0;
|
|
||||||
name = nd->stack[nd->depth - 1].name;
|
|
||||||
if (!name) /* called from trailing_symlink(), done */
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
err = walk_component(nd, LOOKUP_FOLLOW);
|
|
||||||
put_link(nd);
|
|
||||||
goto Walked;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
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,
|
||||||
|
|
Loading…
Add table
Reference in a new issue