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>