[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <ac0855c4fa222bf68452d8154ea52dcdbb99f39f.camel@kernel.org>
Date: Mon, 09 Jun 2025 08:13:11 -0400
From: Jeff Layton <jlayton@...nel.org>
To: NeilBrown <neil@...wn.name>, Alexander Viro <viro@...iv.linux.org.uk>,
Christian Brauner
<brauner@...nel.org>, Jan Kara <jack@...e.cz>, Chuck Lever
<chuck.lever@...cle.com>, Amir Goldstein <amir73il@...il.com>, Jan Harkes
<jaharkes@...cmu.edu>, David Howells <dhowells@...hat.com>, Tyler Hicks
<code@...icks.com>, Miklos Szeredi <miklos@...redi.hu>, Carlos Maiolino
<cem@...nel.org>
Cc: linux-fsdevel@...r.kernel.org, coda@...cmu.edu,
codalist@...a.cs.cmu.edu, linux-nfs@...r.kernel.org,
netfs@...ts.linux.dev, ecryptfs@...r.kernel.org,
linux-unionfs@...r.kernel.org, linux-xfs@...r.kernel.org,
linux-kernel@...r.kernel.org
Subject: Re: [PATCH 1/5] VFS: merge lookup_one_qstr_excl_raw() back into
lookup_one_qstr_excl()
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@...wn.name>
> ---
> 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@...nel.org>
Powered by blists - more mailing lists