Re: [PATCH 1/5] VFS: merge lookup_one_qstr_excl_raw() back into lookup_one_qstr_excl()
From: Jeff Layton
Date: Mon Jun 09 2025 - 08:13:42 EST
On Mon, 2025-06-09 at 09:09 +1000, NeilBrown wrote:
> The effect of lookup_one_qstr_excl_raw() can be achieved by passing
> LOOKUP_CREATE() to lookup_one_qstr_excl() - we don't need a separate
> function.
>
> Signed-off-by: NeilBrown <neil@xxxxxxxxxx>
> ---
> fs/namei.c | 37 ++++++++++++++-----------------------
> 1 file changed, 14 insertions(+), 23 deletions(-)
>
> diff --git a/fs/namei.c b/fs/namei.c
> index 4bb889fc980b..dc42bfac5c57 100644
> --- a/fs/namei.c
> +++ b/fs/namei.c
> @@ -1665,9 +1665,17 @@ static struct dentry *lookup_dcache(const struct qstr *name,
> return dentry;
> }
>
> -static struct dentry *lookup_one_qstr_excl_raw(const struct qstr *name,
> - struct dentry *base,
> - unsigned int flags)
> +/*
> + * Parent directory has inode locked exclusive. This is one
> + * and only case when ->lookup() gets called on non in-lookup
> + * dentries - as the matter of fact, this only gets called
> + * when directory is guaranteed to have no in-lookup children
> + * at all.
> + * Will return -ENOENT if name isn't found and LOOKUP_CREATE wasn't passed.
> + * Will return -EEXIST if name is found and LOOKUP_EXCL was passed.
> + */
> +struct dentry *lookup_one_qstr_excl(const struct qstr *name,
> + struct dentry *base, unsigned int flags)
> {
> struct dentry *dentry;
> struct dentry *old;
> @@ -1675,7 +1683,7 @@ static struct dentry *lookup_one_qstr_excl_raw(const struct qstr *name,
>
> dentry = lookup_dcache(name, base, flags);
> if (dentry)
> - return dentry;
> + goto found;
>
> /* Don't create child dentry for a dead directory. */
> dir = base->d_inode;
> @@ -1691,24 +1699,7 @@ static struct dentry *lookup_one_qstr_excl_raw(const struct qstr *name,
> dput(dentry);
> dentry = old;
> }
> - return dentry;
> -}
> -
> -/*
> - * Parent directory has inode locked exclusive. This is one
> - * and only case when ->lookup() gets called on non in-lookup
> - * dentries - as the matter of fact, this only gets called
> - * when directory is guaranteed to have no in-lookup children
> - * at all.
> - * Will return -ENOENT if name isn't found and LOOKUP_CREATE wasn't passed.
> - * Will return -EEXIST if name is found and LOOKUP_EXCL was passed.
> - */
> -struct dentry *lookup_one_qstr_excl(const struct qstr *name,
> - struct dentry *base, unsigned int flags)
> -{
> - struct dentry *dentry;
> -
> - dentry = lookup_one_qstr_excl_raw(name, base, flags);
> +found:
> if (IS_ERR(dentry))
> return dentry;
> if (d_is_negative(dentry) && !(flags & LOOKUP_CREATE)) {
> @@ -2790,7 +2781,7 @@ struct dentry *kern_path_locked_negative(const char *name, struct path *path)
> if (unlikely(type != LAST_NORM))
> return ERR_PTR(-EINVAL);
> inode_lock_nested(parent_path.dentry->d_inode, I_MUTEX_PARENT);
> - d = lookup_one_qstr_excl_raw(&last, parent_path.dentry, 0);
> + d = lookup_one_qstr_excl(&last, parent_path.dentry, LOOKUP_CREATE);
> if (IS_ERR(d)) {
> inode_unlock(parent_path.dentry->d_inode);
> return d;
Nice little cleanup.
Reviewed-by: Jeff Layton <jlayton@xxxxxxxxxx>