[PATCH 65/79] lift terminate_walk() into callers of walk_component()
From: Al Viro
Date: Tue May 05 2015 - 01:36:06 EST
From: Al Viro <viro@xxxxxxxxxxxxxxxxxx>
Signed-off-by: Al Viro <viro@xxxxxxxxxxxxxxxxxx>
---
fs/namei.c | 25 +++++++++++--------------
1 file changed, 11 insertions(+), 14 deletions(-)
diff --git a/fs/namei.c b/fs/namei.c
index e53f146..76bf620 100644
--- a/fs/namei.c
+++ b/fs/namei.c
@@ -1579,20 +1579,16 @@ static int walk_component(struct nameidata *nd, int follow)
* to be able to know about the current root directory and
* parent relationships.
*/
- if (unlikely(nd->last_type != LAST_NORM)) {
- err = handle_dots(nd, nd->last_type);
- if (err)
- goto out_err;
- return 0;
- }
+ if (unlikely(nd->last_type != LAST_NORM))
+ return handle_dots(nd, nd->last_type);
err = lookup_fast(nd, &path, &inode);
if (unlikely(err)) {
if (err < 0)
- goto out_err;
+ return err;
err = lookup_slow(nd, &path);
if (err < 0)
- goto out_err;
+ return err;
inode = path.dentry->d_inode;
}
@@ -1604,8 +1600,7 @@ static int walk_component(struct nameidata *nd, int follow)
if (nd->flags & LOOKUP_RCU) {
if (unlikely(nd->path.mnt != path.mnt ||
unlazy_walk(nd, path.dentry))) {
- err = -ECHILD;
- goto out_err;
+ return -ECHILD;
}
}
BUG_ON(inode != path.dentry->d_inode);
@@ -1618,8 +1613,6 @@ static int walk_component(struct nameidata *nd, int follow)
out_path_put:
path_to_nameidata(&path, nd);
-out_err:
- terminate_walk(nd);
return err;
}
@@ -1811,7 +1804,7 @@ static int link_path_walk(const char *name, struct nameidata *nd)
err = walk_component(nd, LOOKUP_FOLLOW);
Walked:
if (err < 0)
- goto Err;
+ break;
if (err) {
const char *s;
@@ -2012,11 +2005,15 @@ static int trailing_symlink(struct nameidata *nd)
static inline int lookup_last(struct nameidata *nd)
{
+ int err;
if (nd->last_type == LAST_NORM && nd->last.name[nd->last.len])
nd->flags |= LOOKUP_FOLLOW | LOOKUP_DIRECTORY;
nd->flags &= ~LOOKUP_PARENT;
- return walk_component(nd, nd->flags & LOOKUP_FOLLOW);
+ err = walk_component(nd, nd->flags & LOOKUP_FOLLOW);
+ if (err < 0)
+ terminate_walk(nd);
+ return err;
}
/* Returns 0 and nd will be valid on success; Retuns error, otherwise. */
--
2.1.4
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/