mirror of https://gitee.com/openkylin/linux.git
Take hash recalculation into do_lookup()
Both callers of do_lookup() do the same thing before it Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
parent
e9496ff46a
commit
3cac260ad8
28
fs/namei.c
28
fs/namei.c
|
@ -767,8 +767,18 @@ static int do_lookup(struct nameidata *nd, struct qstr *name,
|
|||
struct path *path)
|
||||
{
|
||||
struct vfsmount *mnt = nd->path.mnt;
|
||||
struct dentry *dentry = __d_lookup(nd->path.dentry, name);
|
||||
struct dentry *dentry;
|
||||
/*
|
||||
* See if the low-level filesystem might want
|
||||
* to use its own hash..
|
||||
*/
|
||||
if (nd->path.dentry->d_op && nd->path.dentry->d_op->d_hash) {
|
||||
int err = nd->path.dentry->d_op->d_hash(nd->path.dentry, name);
|
||||
if (err < 0)
|
||||
return err;
|
||||
}
|
||||
|
||||
dentry = __d_lookup(nd->path.dentry, name);
|
||||
if (!dentry)
|
||||
goto need_lookup;
|
||||
if (dentry->d_op && dentry->d_op->d_revalidate)
|
||||
|
@ -868,16 +878,6 @@ static int link_path_walk(const char *name, struct nameidata *nd)
|
|||
case 1:
|
||||
continue;
|
||||
}
|
||||
/*
|
||||
* See if the low-level filesystem might want
|
||||
* to use its own hash..
|
||||
*/
|
||||
if (nd->path.dentry->d_op && nd->path.dentry->d_op->d_hash) {
|
||||
err = nd->path.dentry->d_op->d_hash(nd->path.dentry,
|
||||
&this);
|
||||
if (err < 0)
|
||||
break;
|
||||
}
|
||||
/* This does the actual lookups.. */
|
||||
err = do_lookup(nd, &this, &next);
|
||||
if (err)
|
||||
|
@ -923,12 +923,6 @@ static int link_path_walk(const char *name, struct nameidata *nd)
|
|||
case 1:
|
||||
goto return_reval;
|
||||
}
|
||||
if (nd->path.dentry->d_op && nd->path.dentry->d_op->d_hash) {
|
||||
err = nd->path.dentry->d_op->d_hash(nd->path.dentry,
|
||||
&this);
|
||||
if (err < 0)
|
||||
break;
|
||||
}
|
||||
err = do_lookup(nd, &this, &next);
|
||||
if (err)
|
||||
break;
|
||||
|
|
Loading…
Reference in New Issue