Signed-off-by: David Howells <[email protected]>
cc: [email protected]
cc: [email protected]
---

 fs/romfs/super.c |   46 ++++++++++++++++++++++++++++------------------
 1 file changed, 28 insertions(+), 18 deletions(-)

diff --git a/fs/romfs/super.c b/fs/romfs/super.c
index 6ccb51993a76..627c2b64ff03 100644
--- a/fs/romfs/super.c
+++ b/fs/romfs/super.c
@@ -65,7 +65,7 @@
 #include <linux/slab.h>
 #include <linux/init.h>
 #include <linux/blkdev.h>
-#include <linux/parser.h>
+#include <linux/fs_context.h>
 #include <linux/mount.h>
 #include <linux/namei.h>
 #include <linux/statfs.h>
@@ -430,10 +430,10 @@ static int romfs_statfs(struct dentry *dentry, struct 
kstatfs *buf)
 /*
  * remounting must involve read-only
  */
-static int romfs_remount(struct super_block *sb, int *flags, char *data)
+static int romfs_reconfigure(struct fs_context *fc)
 {
-       sync_filesystem(sb);
-       *flags |= SB_RDONLY;
+       sync_filesystem(fc->root->d_sb);
+       fc->sb_flags |= SB_RDONLY;
        return 0;
 }
 
@@ -441,7 +441,6 @@ static const struct super_operations romfs_super_ops = {
        .alloc_inode    = romfs_alloc_inode,
        .destroy_inode  = romfs_destroy_inode,
        .statfs         = romfs_statfs,
-       .remount_fs     = romfs_remount,
 };
 
 /*
@@ -464,7 +463,7 @@ static __u32 romfs_checksum(const void *data, int size)
 /*
  * fill in the superblock
  */
-static int romfs_fill_super(struct super_block *sb, void *data, int silent)
+static int romfs_fill_super(struct super_block *sb, struct fs_context *fc)
 {
        struct romfs_super_block *rsb;
        struct inode *root;
@@ -511,8 +510,8 @@ static int romfs_fill_super(struct super_block *sb, void 
*data, int silent)
 
        if (rsb->word0 != ROMSB_WORD0 || rsb->word1 != ROMSB_WORD1 ||
            img_size < ROMFH_SIZE) {
-               if (!silent)
-                       pr_warn("VFS: Can't find a romfs filesystem on dev 
%s.\n",
+               if (!(fc->sb_flags & SB_SILENT))
+                       errorf(fc, "VFS: Can't find a romfs filesystem on dev 
%s.\n",
                               sb->s_id);
                goto error_rsb_inval;
        }
@@ -525,7 +524,7 @@ static int romfs_fill_super(struct super_block *sb, void 
*data, int silent)
        storage = sb->s_mtd ? "MTD" : "the block layer";
 
        len = strnlen(rsb->name, ROMFS_MAXFN);
-       if (!silent)
+       if (!(fc->sb_flags & SB_SILENT))
                pr_notice("Mounting image '%*.*s' through %s\n",
                          (unsigned) len, (unsigned) len, rsb->name, storage);
 
@@ -555,23 +554,34 @@ static int romfs_fill_super(struct super_block *sb, void 
*data, int silent)
 /*
  * get a superblock for mounting
  */
-static struct dentry *romfs_mount(struct file_system_type *fs_type,
-                       int flags, const char *dev_name,
-                       void *data)
+static int romfs_get_tree(struct fs_context *fc)
 {
-       struct dentry *ret = ERR_PTR(-EINVAL);
+       int ret = -EINVAL;
 
 #ifdef CONFIG_ROMFS_ON_MTD
-       ret = mount_mtd(fs_type, flags, dev_name, data, romfs_fill_super);
+       ret = vfs_get_mtd_super(fc, romfs_fill_super);
 #endif
 #ifdef CONFIG_ROMFS_ON_BLOCK
-       if (ret == ERR_PTR(-EINVAL))
-               ret = mount_bdev(fs_type, flags, dev_name, data,
-                                 romfs_fill_super);
+       if (ret == -EINVAL)
+               ret = vfs_get_block_super(fc, romfs_fill_super);
 #endif
        return ret;
 }
 
+static const struct fs_context_operations romfs_context_ops = {
+       .get_tree       = romfs_get_tree,
+       .reconfigure    = romfs_reconfigure,
+};
+
+/*
+ * Set up the filesystem mount context.
+ */
+static int romfs_init_fs_context(struct fs_context *fc)
+{
+       fc->ops = &romfs_context_ops;
+       return 0;
+}
+
 /*
  * destroy a romfs superblock in the appropriate manner
  */
@@ -594,7 +604,7 @@ static void romfs_kill_sb(struct super_block *sb)
 static struct file_system_type romfs_fs_type = {
        .owner          = THIS_MODULE,
        .name           = "romfs",
-       .mount          = romfs_mount,
+       .init_fs_context = romfs_init_fs_context,
        .kill_sb        = romfs_kill_sb,
        .fs_flags       = FS_REQUIRES_DEV,
 };

Reply via email to