mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-11 04:18:39 +08:00
namei: fold unlazy_link() into its sole caller
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
parent
7ce7d89f48
commit
ad1633a151
32
fs/namei.c
32
fs/namei.c
@ -749,24 +749,6 @@ drop_root_mnt:
|
||||
return -ECHILD;
|
||||
}
|
||||
|
||||
static int unlazy_link(struct nameidata *nd, struct path *link, unsigned seq)
|
||||
{
|
||||
if (unlikely(!legitimize_path(nd, link, seq))) {
|
||||
drop_links(nd);
|
||||
nd->depth = 0;
|
||||
nd->flags &= ~LOOKUP_RCU;
|
||||
nd->path.mnt = NULL;
|
||||
nd->path.dentry = NULL;
|
||||
if (!(nd->flags & LOOKUP_ROOT))
|
||||
nd->root.mnt = NULL;
|
||||
rcu_read_unlock();
|
||||
} else if (likely(unlazy_walk(nd, NULL, 0)) == 0) {
|
||||
return 0;
|
||||
}
|
||||
path_put(link);
|
||||
return -ECHILD;
|
||||
}
|
||||
|
||||
static inline int d_revalidate(struct dentry *dentry, unsigned int flags)
|
||||
{
|
||||
return dentry->d_op->d_revalidate(dentry, flags);
|
||||
@ -1706,9 +1688,17 @@ static int pick_link(struct nameidata *nd, struct path *link,
|
||||
error = nd_alloc_stack(nd);
|
||||
if (unlikely(error)) {
|
||||
if (error == -ECHILD) {
|
||||
if (unlikely(unlazy_link(nd, link, seq)))
|
||||
return -ECHILD;
|
||||
error = nd_alloc_stack(nd);
|
||||
if (unlikely(!legitimize_path(nd, link, seq))) {
|
||||
drop_links(nd);
|
||||
nd->depth = 0;
|
||||
nd->flags &= ~LOOKUP_RCU;
|
||||
nd->path.mnt = NULL;
|
||||
nd->path.dentry = NULL;
|
||||
if (!(nd->flags & LOOKUP_ROOT))
|
||||
nd->root.mnt = NULL;
|
||||
rcu_read_unlock();
|
||||
} else if (likely(unlazy_walk(nd, NULL, 0)) == 0)
|
||||
error = nd_alloc_stack(nd);
|
||||
}
|
||||
if (error) {
|
||||
path_put(link);
|
||||
|
Loading…
Reference in New Issue
Block a user