Signed-off-by: David Howells <dhowells@xxxxxxxxxx> cc: Matthew Garrett <matthew.garrett@xxxxxxxxxx> cc: Jeremy Kerr <jk@xxxxxxxxxx> cc: Ard Biesheuvel <ard.biesheuvel@xxxxxxxxxx> cc: linux-efi@xxxxxxxxxxxxxxx --- fs/efivarfs/super.c | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/fs/efivarfs/super.c b/fs/efivarfs/super.c index 5b68e4294faa..1ea25c7a329a 100644 --- a/fs/efivarfs/super.c +++ b/fs/efivarfs/super.c @@ -10,6 +10,7 @@ #include <linux/ctype.h> #include <linux/efi.h> #include <linux/fs.h> +#include <linux/fs_context.h> #include <linux/module.h> #include <linux/pagemap.h> #include <linux/ucs2_string.h> @@ -191,7 +192,7 @@ static int efivarfs_destroy(struct efivar_entry *entry, void *data) return 0; } -static int efivarfs_fill_super(struct super_block *sb, void *data, int silent) +static int efivarfs_fill_super(struct super_block *sb, struct fs_context *fc) { struct inode *inode = NULL; struct dentry *root; @@ -226,10 +227,19 @@ static int efivarfs_fill_super(struct super_block *sb, void *data, int silent) return err; } -static struct dentry *efivarfs_mount(struct file_system_type *fs_type, - int flags, const char *dev_name, void *data) +static int efivarfs_get_tree(struct fs_context *fc) { - return mount_single(fs_type, flags, data, efivarfs_fill_super); + return vfs_get_super(fc, vfs_get_single_super, efivarfs_fill_super); +} + +static const struct fs_context_operations efivarfs_context_ops = { + .get_tree = efivarfs_get_tree, +}; + +static int efivarfs_init_fs_context(struct fs_context *fc) +{ + fc->ops = &efivarfs_context_ops; + return 0; } static void efivarfs_kill_sb(struct super_block *sb) @@ -244,7 +254,7 @@ static void efivarfs_kill_sb(struct super_block *sb) static struct file_system_type efivarfs_type = { .owner = THIS_MODULE, .name = "efivarfs", - .mount = efivarfs_mount, + .init_fs_context = efivarfs_init_fs_context, .kill_sb = efivarfs_kill_sb, };