Commit f7df08ee authored by Al Viro's avatar Al Viro
Browse files

trailing_symlink: nd->depth massage, part 5



move increment of ->depth to the point where we'd discovered
that get_link() has not returned an error, adjust exits
accordingly.

Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent ef1a3e7b
Loading
Loading
Loading
Loading
+10 −5
Original line number Diff line number Diff line
@@ -2009,8 +2009,11 @@ static int trailing_symlink(struct nameidata *nd)
	s = get_link(nd);
	if (unlikely(IS_ERR(s)))
		return PTR_ERR(s);
	if (unlikely(!s))
	nd->depth++;
	if (unlikely(!s)) {
		nd->depth--;
		return 0;
	}
	if (*s == '/') {
		if (!nd->root.mnt)
			set_root(nd);
@@ -2020,13 +2023,15 @@ static int trailing_symlink(struct nameidata *nd)
		nd->flags |= LOOKUP_JUMPED;
	}
	nd->inode = nd->path.dentry->d_inode;
	nd->depth++;
	error = link_path_walk(s, nd);
	if (unlikely(error)) {
		nd->depth--;
	if (unlikely(error))
		put_link(nd);
		return error;
	}
	nd->depth--;
	return 0;
}

static inline int lookup_last(struct nameidata *nd)
{