Re: [PATCH 02/10] fs: add path_create(), path_move() and path_clone()
From: Mateusz Guzik
Date: Sun Sep 13 2026 - 10:57:13 EST
On Sun, Sep 13, 2026 at 4:49 PM Mateusz Guzik <mjguzik@xxxxxxxxx> wrote:
>
> Signed-off-by: Mateusz Guzik <mjguzik@xxxxxxxxx>
> ---
> fs/namei.c | 29 +++++++++++++++++++++++++++++
> include/linux/path.h | 14 ++++++++++++--
> 2 files changed, 41 insertions(+), 2 deletions(-)
>
> diff --git a/fs/namei.c b/fs/namei.c
> index ca4f5e3be99a..c8754c7ba8be 100644
> --- a/fs/namei.c
> +++ b/fs/namei.c
> @@ -698,6 +698,35 @@ static __always_inline int lookup_inode_permission_may_exec(struct mnt_idmap *id
> return security_inode_permission(inode, mask);
> }
>
> +/**
> + * path_create - WRITEME
sigh
I'll take care of it. for the purpose of review pretend this is actual text ;)
> + * @path: path to get the reference to
> + * @mnt: WRITEME
> + * @dentry: WRITEME
> + *
> + * Create a path object using the given vfsmount and dentry pair while incrementing
> + * the reference count on both.
> + */
> +void path_create(struct path *path, struct vfsmount *mnt, struct dentry *dentry)
> +{
> + path->mnt = mntget(mnt);
> + path->dentry = dget(dentry);
> +}
> +EXPORT_SYMBOL(path_create);
> +
> +/**
> + * path_clone - WRITEME
> + * @path: path to get the reference to
> + *
> + * Given a path increment the reference count to the dentry and the vfsmount.
> + */
> +void path_clone(const struct path *src, struct path *dst)
> +{
> + dst->mnt = mntget(src->mnt);
> + dst->dentry = dget(src->dentry);
> +}
> +EXPORT_SYMBOL(path_clone);
> +
> /**
> * path_get - get a reference to a path
> * @path: path to get the reference to
> diff --git a/include/linux/path.h b/include/linux/path.h
> index 7ea389dc764b..8a621e0e1921 100644
> --- a/include/linux/path.h
> +++ b/include/linux/path.h
> @@ -10,8 +10,18 @@ struct path {
> struct dentry *dentry;
> } __randomize_layout;
>
> -extern void path_get(const struct path *);
> -extern void path_put(const struct path *);
> +void path_create(struct path *, struct vfsmount *, struct dentry *);
> +void path_clone(const struct path *, struct path *);
> +void path_get(const struct path *);
> +void path_put(const struct path *);
> +
> +static inline void path_move(struct path *src, struct path *dst)
> +{
> + dst->mnt = src->mnt;
> + dst->dentry = src->dentry;
> + src->mnt = NULL;
> + src->dentry = NULL;
> +}
>
> static inline int path_equal(const struct path *path1, const struct path *path2)
> {
> --
> 2.53.0
>