From: Hongbo Li <lihongbo22@huawei.com>
To: <stable@vger.kernel.org>, <stable-commits@vger.kernel.org>
Cc: Richard Weinberger <richard@nod.at>,
Anton Ivanov <anton.ivanov@cambridgegreys.com>,
Johannes Berg <johannes@sipsolutions.net>
Subject: Re: Patch "hostfs: convert hostfs to use the new mount API" has been added to the 6.6-stable tree
Date: Wed, 5 Feb 2025 09:13:33 +0800 [thread overview]
Message-ID: <e71dbfcd-317e-43b0-8e67-2a7ea3510281@huawei.com> (raw)
In-Reply-To: <20250203162734.2179532-1-sashal@kernel.org>
On 2025/2/4 0:27, Sasha Levin wrote:
> This is a note to let you know that I've just added the patch titled
>
> hostfs: convert hostfs to use the new mount API
>
> to the 6.6-stable tree which can be found at:
> http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
>
Hi Sasha,
If this, the fix : ef9ca17ca458 ("hostfs: fix the host directory parse
when mounting.") also should be added. It fixes the mounting bug when
pass the host directory.
Thanks,
Hongbo
> The filename of the patch is:
> hostfs-convert-hostfs-to-use-the-new-mount-api.patch
> and it can be found in the queue-6.6 subdirectory.
>
> If you, or anyone else, feels it should not be added to the stable tree,
> please let <stable@vger.kernel.org> know about it.
>
>
>
> commit 6f2433956e6ade80d59bd673d4062ec2c1bacc3e
> Author: Hongbo Li <lihongbo22@huawei.com>
> Date: Thu May 30 20:01:11 2024 +0800
>
> hostfs: convert hostfs to use the new mount API
>
> [ Upstream commit cd140ce9f611a5e9d2a5989a282b75e55c71dab3 ]
>
> Convert the hostfs filesystem to the new internal mount API as the old
> one will be obsoleted and removed. This allows greater flexibility in
> communication of mount parameters between userspace, the VFS and the
> filesystem.
>
> See Documentation/filesystems/mount_api.txt for more information.
>
> Signed-off-by: Hongbo Li <lihongbo22@huawei.com>
> Link: https://lore.kernel.org/r/20240530120111.3794664-1-lihongbo22@huawei.com
> Signed-off-by: Christian Brauner <brauner@kernel.org>
> Stable-dep-of: 60a600243244 ("hostfs: fix string handling in __dentry_name()")
> Signed-off-by: Sasha Levin <sashal@kernel.org>
>
> diff --git a/fs/hostfs/hostfs_kern.c b/fs/hostfs/hostfs_kern.c
> index ff201753fd181..1fb8eacb9817f 100644
> --- a/fs/hostfs/hostfs_kern.c
> +++ b/fs/hostfs/hostfs_kern.c
> @@ -16,11 +16,16 @@
> #include <linux/seq_file.h>
> #include <linux/writeback.h>
> #include <linux/mount.h>
> +#include <linux/fs_context.h>
> #include <linux/namei.h>
> #include "hostfs.h"
> #include <init.h>
> #include <kern.h>
>
> +struct hostfs_fs_info {
> + char *host_root_path;
> +};
> +
> struct hostfs_inode_info {
> int fd;
> fmode_t mode;
> @@ -90,8 +95,10 @@ static char *__dentry_name(struct dentry *dentry, char *name)
> char *p = dentry_path_raw(dentry, name, PATH_MAX);
> char *root;
> size_t len;
> + struct hostfs_fs_info *fsi;
>
> - root = dentry->d_sb->s_fs_info;
> + fsi = dentry->d_sb->s_fs_info;
> + root = fsi->host_root_path;
> len = strlen(root);
> if (IS_ERR(p)) {
> __putname(name);
> @@ -196,8 +203,10 @@ static int hostfs_statfs(struct dentry *dentry, struct kstatfs *sf)
> long long f_bavail;
> long long f_files;
> long long f_ffree;
> + struct hostfs_fs_info *fsi;
>
> - err = do_statfs(dentry->d_sb->s_fs_info,
> + fsi = dentry->d_sb->s_fs_info;
> + err = do_statfs(fsi->host_root_path,
> &sf->f_bsize, &f_blocks, &f_bfree, &f_bavail, &f_files,
> &f_ffree, &sf->f_fsid, sizeof(sf->f_fsid),
> &sf->f_namelen);
> @@ -245,7 +254,11 @@ static void hostfs_free_inode(struct inode *inode)
>
> static int hostfs_show_options(struct seq_file *seq, struct dentry *root)
> {
> - const char *root_path = root->d_sb->s_fs_info;
> + struct hostfs_fs_info *fsi;
> + const char *root_path;
> +
> + fsi = root->d_sb->s_fs_info;
> + root_path = fsi->host_root_path;
> size_t offset = strlen(root_ino) + 1;
>
> if (strlen(root_path) > offset)
> @@ -924,10 +937,11 @@ static const struct inode_operations hostfs_link_iops = {
> .get_link = hostfs_get_link,
> };
>
> -static int hostfs_fill_sb_common(struct super_block *sb, void *d, int silent)
> +static int hostfs_fill_super(struct super_block *sb, struct fs_context *fc)
> {
> + struct hostfs_fs_info *fsi = sb->s_fs_info;
> struct inode *root_inode;
> - char *host_root_path, *req_root = d;
> + char *host_root = fc->source;
> int err;
>
> sb->s_blocksize = 1024;
> @@ -941,15 +955,15 @@ static int hostfs_fill_sb_common(struct super_block *sb, void *d, int silent)
> return err;
>
> /* NULL is printed as '(null)' by printf(): avoid that. */
> - if (req_root == NULL)
> - req_root = "";
> + if (fc->source == NULL)
> + host_root = "";
>
> - sb->s_fs_info = host_root_path =
> - kasprintf(GFP_KERNEL, "%s/%s", root_ino, req_root);
> - if (host_root_path == NULL)
> + fsi->host_root_path =
> + kasprintf(GFP_KERNEL, "%s/%s", root_ino, host_root);
> + if (fsi->host_root_path == NULL)
> return -ENOMEM;
>
> - root_inode = hostfs_iget(sb, host_root_path);
> + root_inode = hostfs_iget(sb, fsi->host_root_path);
> if (IS_ERR(root_inode))
> return PTR_ERR(root_inode);
>
> @@ -957,7 +971,7 @@ static int hostfs_fill_sb_common(struct super_block *sb, void *d, int silent)
> char *name;
>
> iput(root_inode);
> - name = follow_link(host_root_path);
> + name = follow_link(fsi->host_root_path);
> if (IS_ERR(name))
> return PTR_ERR(name);
>
> @@ -974,11 +988,38 @@ static int hostfs_fill_sb_common(struct super_block *sb, void *d, int silent)
> return 0;
> }
>
> -static struct dentry *hostfs_read_sb(struct file_system_type *type,
> - int flags, const char *dev_name,
> - void *data)
> +static int hostfs_fc_get_tree(struct fs_context *fc)
> {
> - return mount_nodev(type, flags, data, hostfs_fill_sb_common);
> + return get_tree_nodev(fc, hostfs_fill_super);
> +}
> +
> +static void hostfs_fc_free(struct fs_context *fc)
> +{
> + struct hostfs_fs_info *fsi = fc->s_fs_info;
> +
> + if (!fsi)
> + return;
> +
> + kfree(fsi->host_root_path);
> + kfree(fsi);
> +}
> +
> +static const struct fs_context_operations hostfs_context_ops = {
> + .get_tree = hostfs_fc_get_tree,
> + .free = hostfs_fc_free,
> +};
> +
> +static int hostfs_init_fs_context(struct fs_context *fc)
> +{
> + struct hostfs_fs_info *fsi;
> +
> + fsi = kzalloc(sizeof(*fsi), GFP_KERNEL);
> + if (!fsi)
> + return -ENOMEM;
> +
> + fc->s_fs_info = fsi;
> + fc->ops = &hostfs_context_ops;
> + return 0;
> }
>
> static void hostfs_kill_sb(struct super_block *s)
> @@ -988,11 +1029,11 @@ static void hostfs_kill_sb(struct super_block *s)
> }
>
> static struct file_system_type hostfs_type = {
> - .owner = THIS_MODULE,
> - .name = "hostfs",
> - .mount = hostfs_read_sb,
> - .kill_sb = hostfs_kill_sb,
> - .fs_flags = 0,
> + .owner = THIS_MODULE,
> + .name = "hostfs",
> + .init_fs_context = hostfs_init_fs_context,
> + .kill_sb = hostfs_kill_sb,
> + .fs_flags = 0,
> };
> MODULE_ALIAS_FS("hostfs");
>
next parent reply other threads:[~2025-02-05 1:29 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <20250203162734.2179532-1-sashal@kernel.org>
2025-02-05 1:13 ` Hongbo Li [this message]
2025-02-05 8:53 ` Patch "hostfs: convert hostfs to use the new mount API" has been added to the 6.6-stable tree Greg KH
2025-02-06 1:09 ` Hongbo Li
2025-02-06 3:54 ` Greg KH
2025-02-07 1:22 ` Hongbo Li
2025-02-07 15:10 ` Greg KH
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=e71dbfcd-317e-43b0-8e67-2a7ea3510281@huawei.com \
--to=lihongbo22@huawei.com \
--cc=anton.ivanov@cambridgegreys.com \
--cc=johannes@sipsolutions.net \
--cc=richard@nod.at \
--cc=stable-commits@vger.kernel.org \
--cc=stable@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox