Commit 51c6546c authored by Al Viro's avatar Al Viro
Browse files

follow_dotdot{,_rcu}(): change calling conventions



Instead of returning NULL when we are in root, just make it return
the current position (and set *seqp and *inodep accordingly).
That collapses the calls of step_into() in handle_dots()

Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent 82ef0698
Loading
Loading
Loading
Loading
+7 −9
Original line number Diff line number Diff line
@@ -1909,7 +1909,9 @@ static struct dentry *follow_dotdot_rcu(struct nameidata *nd,
		return ERR_PTR(-ECHILD);
	if (unlikely(nd->flags & LOOKUP_BENEATH))
		return ERR_PTR(-ECHILD);
	return NULL;
	*seqp = nd->seq;
	*inodep = nd->path.dentry->d_inode;
	return nd->path.dentry;
}

static struct dentry *follow_dotdot(struct nameidata *nd,
@@ -1945,8 +1947,9 @@ static struct dentry *follow_dotdot(struct nameidata *nd,
in_root:
	if (unlikely(nd->flags & LOOKUP_BENEATH))
		return ERR_PTR(-EXDEV);
	dget(nd->path.dentry);
	return NULL;
	*seqp = 0;
	*inodep = nd->path.dentry->d_inode;
	return dget(nd->path.dentry);
}

static const char *handle_dots(struct nameidata *nd, int type)
@@ -1968,12 +1971,7 @@ static const char *handle_dots(struct nameidata *nd, int type)
			parent = follow_dotdot(nd, &inode, &seq);
		if (IS_ERR(parent))
			return ERR_CAST(parent);
		if (unlikely(!parent))
			error = step_into(nd, WALK_NOFOLLOW,
					 nd->path.dentry, nd->inode, nd->seq);
		else
			error = step_into(nd, WALK_NOFOLLOW,
					 parent, inode, seq);
		error = step_into(nd, WALK_NOFOLLOW, parent, inode, seq);
		if (unlikely(error))
			return error;