summaryrefslogtreecommitdiffstats
path: root/fs/binfmt_misc.c
diff options
context:
space:
mode:
authorDavid Howells <dhowells@redhat.com>2019-03-25 12:38:28 -0400
committerAl Viro <viro@zeniv.linux.org.uk>2019-07-04 22:01:58 -0400
commitbc99a664e9be24e49e09da1250ede0c598d958d1 (patch)
tree6c0f38c43215927547645400e1103aafabff2a1d /fs/binfmt_misc.c
parentc23a0bbab30cc1714b6b1d6a1c153a5ccab3f0d8 (diff)
vfs: Convert binfmt_misc to use the new mount API
Convert the binfmt_misc 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: David Howells <dhowells@redhat.com> cc: Alexander Viro <viro@zeniv.linux.org.uk> cc: linux-fsdevel@vger.kernel.org Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'fs/binfmt_misc.c')
-rw-r--r--fs/binfmt_misc.c20
1 files changed, 15 insertions, 5 deletions
diff --git a/fs/binfmt_misc.c b/fs/binfmt_misc.c
index aa4a7a23ff99..46a3d149bb7f 100644
--- a/fs/binfmt_misc.c
+++ b/fs/binfmt_misc.c
@@ -22,6 +22,7 @@
22#include <linux/pagemap.h> 22#include <linux/pagemap.h>
23#include <linux/namei.h> 23#include <linux/namei.h>
24#include <linux/mount.h> 24#include <linux/mount.h>
25#include <linux/fs_context.h>
25#include <linux/syscalls.h> 26#include <linux/syscalls.h>
26#include <linux/fs.h> 27#include <linux/fs.h>
27#include <linux/uaccess.h> 28#include <linux/uaccess.h>
@@ -820,7 +821,7 @@ static const struct super_operations s_ops = {
820 .evict_inode = bm_evict_inode, 821 .evict_inode = bm_evict_inode,
821}; 822};
822 823
823static int bm_fill_super(struct super_block *sb, void *data, int silent) 824static int bm_fill_super(struct super_block *sb, struct fs_context *fc)
824{ 825{
825 int err; 826 int err;
826 static const struct tree_descr bm_files[] = { 827 static const struct tree_descr bm_files[] = {
@@ -835,10 +836,19 @@ static int bm_fill_super(struct super_block *sb, void *data, int silent)
835 return err; 836 return err;
836} 837}
837 838
838static struct dentry *bm_mount(struct file_system_type *fs_type, 839static int bm_get_tree(struct fs_context *fc)
839 int flags, const char *dev_name, void *data)
840{ 840{
841 return mount_single(fs_type, flags, data, bm_fill_super); 841 return get_tree_single(fc, bm_fill_super);
842}
843
844static const struct fs_context_operations bm_context_ops = {
845 .get_tree = bm_get_tree,
846};
847
848static int bm_init_fs_context(struct fs_context *fc)
849{
850 fc->ops = &bm_context_ops;
851 return 0;
842} 852}
843 853
844static struct linux_binfmt misc_format = { 854static struct linux_binfmt misc_format = {
@@ -849,7 +859,7 @@ static struct linux_binfmt misc_format = {
849static struct file_system_type bm_fs_type = { 859static struct file_system_type bm_fs_type = {
850 .owner = THIS_MODULE, 860 .owner = THIS_MODULE,
851 .name = "binfmt_misc", 861 .name = "binfmt_misc",
852 .mount = bm_mount, 862 .init_fs_context = bm_init_fs_context,
853 .kill_sb = kill_litter_super, 863 .kill_sb = kill_litter_super,
854}; 864};
855MODULE_ALIAS_FS("binfmt_misc"); 865MODULE_ALIAS_FS("binfmt_misc");