提交 d2d9e9fb 编写于 作者: A Al Viro

merge do_revalidate() into its only caller

Signed-off-by: NAl Viro <viro@zeniv.linux.org.uk>
上级 4ad5abb3
...@@ -436,28 +436,6 @@ static inline int d_revalidate(struct dentry *dentry, struct nameidata *nd) ...@@ -436,28 +436,6 @@ static inline int d_revalidate(struct dentry *dentry, struct nameidata *nd)
return dentry->d_op->d_revalidate(dentry, nd); return dentry->d_op->d_revalidate(dentry, nd);
} }
static struct dentry *
do_revalidate(struct dentry *dentry, struct nameidata *nd)
{
int status = d_revalidate(dentry, nd);
if (unlikely(status <= 0)) {
/*
* The dentry failed validation.
* If d_revalidate returned 0 attempt to invalidate
* the dentry otherwise d_revalidate is asking us
* to return a fail status.
*/
if (status < 0) {
dput(dentry);
dentry = ERR_PTR(status);
} else if (!d_invalidate(dentry)) {
dput(dentry);
dentry = NULL;
}
}
return dentry;
}
/** /**
* complete_walk - successful completion of path walk * complete_walk - successful completion of path walk
* @nd: pointer nameidata * @nd: pointer nameidata
...@@ -1642,8 +1620,24 @@ static struct dentry *__lookup_hash(struct qstr *name, ...@@ -1642,8 +1620,24 @@ static struct dentry *__lookup_hash(struct qstr *name,
return dentry; return dentry;
} }
if (dentry && (dentry->d_flags & DCACHE_OP_REVALIDATE)) if (dentry && (dentry->d_flags & DCACHE_OP_REVALIDATE)) {
dentry = do_revalidate(dentry, nd); int status = d_revalidate(dentry, nd);
if (unlikely(status <= 0)) {
/*
* The dentry failed validation.
* If d_revalidate returned 0 attempt to invalidate
* the dentry otherwise d_revalidate is asking us
* to return a fail status.
*/
if (status < 0) {
dput(dentry);
return ERR_PTR(status);
} else if (!d_invalidate(dentry)) {
dput(dentry);
dentry = NULL;
}
}
}
if (!dentry) if (!dentry)
dentry = d_alloc_and_lookup(base, name, nd); dentry = d_alloc_and_lookup(base, name, nd);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册