summaryrefslogtreecommitdiff
path: root/fs
diff options
context:
space:
mode:
authorAl Viro <viro@zeniv.linux.org.uk>2022-07-04 11:20:51 -0400
committerAl Viro <viro@zeniv.linux.org.uk>2022-07-05 16:16:28 -0400
commit51c6546c30ea6efe9aa819015bd61ffefc910944 (patch)
tree3be5f96da452ba4df1b412107c172f354c9f5776 /fs
parent82ef069805a352bacb22fd4322b746edf809603c (diff)
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: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'fs')
-rw-r--r--fs/namei.c16
1 files changed, 7 insertions, 9 deletions
diff --git a/fs/namei.c b/fs/namei.c
index e4a58d5975ca..9c50facb9769 100644
--- a/fs/namei.c
+++ b/fs/namei.c
@@ -1909,7 +1909,9 @@ in_root:
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;