minix: convert minix to use the new mount api

Convert the minix filesystem to use the new mount API.

Tested using mount and remount on minix device.

Signed-off-by: Bill O'Donnell <bodonnel@redhat.com>
Link: https://lore.kernel.org/r/20240307163325.998723-1-bodonnel@redhat.com
Acked-by: Eric Sandeen <sandeen@redhat.com>
Signed-off-by: Christian Brauner <brauner@kernel.org>
This commit is contained in:
Bill O'Donnell 2024-03-07 10:29:18 -06:00 committed by Christian Brauner
parent 78ff640819
commit 7cd7bfe593
No known key found for this signature in database
GPG Key ID: 91C61BC06578DCA2

View File

@ -20,11 +20,11 @@
#include <linux/mpage.h> #include <linux/mpage.h>
#include <linux/vfs.h> #include <linux/vfs.h>
#include <linux/writeback.h> #include <linux/writeback.h>
#include <linux/fs_context.h>
static int minix_write_inode(struct inode *inode, static int minix_write_inode(struct inode *inode,
struct writeback_control *wbc); struct writeback_control *wbc);
static int minix_statfs(struct dentry *dentry, struct kstatfs *buf); static int minix_statfs(struct dentry *dentry, struct kstatfs *buf);
static int minix_remount (struct super_block * sb, int * flags, char * data);
static void minix_evict_inode(struct inode *inode) static void minix_evict_inode(struct inode *inode)
{ {
@ -111,19 +111,19 @@ static const struct super_operations minix_sops = {
.evict_inode = minix_evict_inode, .evict_inode = minix_evict_inode,
.put_super = minix_put_super, .put_super = minix_put_super,
.statfs = minix_statfs, .statfs = minix_statfs,
.remount_fs = minix_remount,
}; };
static int minix_remount (struct super_block * sb, int * flags, char * data) static int minix_reconfigure(struct fs_context *fc)
{ {
struct minix_sb_info * sbi = minix_sb(sb);
struct minix_super_block * ms; struct minix_super_block * ms;
struct super_block *sb = fc->root->d_sb;
struct minix_sb_info * sbi = sb->s_fs_info;
sync_filesystem(sb); sync_filesystem(sb);
ms = sbi->s_ms; ms = sbi->s_ms;
if ((bool)(*flags & SB_RDONLY) == sb_rdonly(sb)) if ((bool)(fc->sb_flags & SB_RDONLY) == sb_rdonly(sb))
return 0; return 0;
if (*flags & SB_RDONLY) { if (fc->sb_flags & SB_RDONLY) {
if (ms->s_state & MINIX_VALID_FS || if (ms->s_state & MINIX_VALID_FS ||
!(sbi->s_mount_state & MINIX_VALID_FS)) !(sbi->s_mount_state & MINIX_VALID_FS))
return 0; return 0;
@ -170,7 +170,7 @@ static bool minix_check_superblock(struct super_block *sb)
return true; return true;
} }
static int minix_fill_super(struct super_block *s, void *data, int silent) static int minix_fill_super(struct super_block *s, struct fs_context *fc)
{ {
struct buffer_head *bh; struct buffer_head *bh;
struct buffer_head **map; struct buffer_head **map;
@ -180,6 +180,7 @@ static int minix_fill_super(struct super_block *s, void *data, int silent)
struct inode *root_inode; struct inode *root_inode;
struct minix_sb_info *sbi; struct minix_sb_info *sbi;
int ret = -EINVAL; int ret = -EINVAL;
int silent = fc->sb_flags & SB_SILENT;
sbi = kzalloc(sizeof(struct minix_sb_info), GFP_KERNEL); sbi = kzalloc(sizeof(struct minix_sb_info), GFP_KERNEL);
if (!sbi) if (!sbi)
@ -371,6 +372,23 @@ out:
return ret; return ret;
} }
static int minix_get_tree(struct fs_context *fc)
{
return get_tree_bdev(fc, minix_fill_super);
}
static const struct fs_context_operations minix_context_ops = {
.get_tree = minix_get_tree,
.reconfigure = minix_reconfigure,
};
static int minix_init_fs_context(struct fs_context *fc)
{
fc->ops = &minix_context_ops;
return 0;
}
static int minix_statfs(struct dentry *dentry, struct kstatfs *buf) static int minix_statfs(struct dentry *dentry, struct kstatfs *buf)
{ {
struct super_block *sb = dentry->d_sb; struct super_block *sb = dentry->d_sb;
@ -680,18 +698,12 @@ void minix_truncate(struct inode * inode)
V2_minix_truncate(inode); V2_minix_truncate(inode);
} }
static struct dentry *minix_mount(struct file_system_type *fs_type,
int flags, const char *dev_name, void *data)
{
return mount_bdev(fs_type, flags, dev_name, data, minix_fill_super);
}
static struct file_system_type minix_fs_type = { static struct file_system_type minix_fs_type = {
.owner = THIS_MODULE, .owner = THIS_MODULE,
.name = "minix", .name = "minix",
.mount = minix_mount, .kill_sb = kill_block_super,
.kill_sb = kill_block_super, .fs_flags = FS_REQUIRES_DEV,
.fs_flags = FS_REQUIRES_DEV, .init_fs_context = minix_init_fs_context,
}; };
MODULE_ALIAS_FS("minix"); MODULE_ALIAS_FS("minix");