introduce fs_context methods
[muen/linux.git] / fs / super.c
index 5055323..76b3181 100644 (file)
@@ -894,13 +894,15 @@ int reconfigure_super(struct fs_context *fc)
                }
        }
 
-       retval = legacy_reconfigure(fc);
-       if (retval) {
-               if (!force)
-                       goto cancel_readonly;
-               /* If forced remount, go ahead despite any errors */
-               WARN(1, "forced remount of a %s fs returned %i\n",
-                    sb->s_type->name, retval);
+       if (fc->ops->reconfigure) {
+               retval = fc->ops->reconfigure(fc);
+               if (retval) {
+                       if (!force)
+                               goto cancel_readonly;
+                       /* If forced remount, go ahead despite any errors */
+                       WARN(1, "forced remount of a %s fs returned %i\n",
+                            sb->s_type->name, retval);
+               }
        }
 
        WRITE_ONCE(sb->s_flags, ((sb->s_flags & ~fc->sb_flags_mask) |
@@ -1294,10 +1296,28 @@ int vfs_get_tree(struct fs_context *fc)
        struct super_block *sb;
        int error;
 
-       error = legacy_get_tree(fc);
+       if (fc->fs_type->fs_flags & FS_REQUIRES_DEV && !fc->source)
+               return -ENOENT;
+
+       if (fc->root)
+               return -EBUSY;
+
+       /* Get the mountable root in fc->root, with a ref on the root and a ref
+        * on the superblock.
+        */
+       error = fc->ops->get_tree(fc);
        if (error < 0)
                return error;
 
+       if (!fc->root) {
+               pr_err("Filesystem %s get_tree() didn't set fc->root\n",
+                      fc->fs_type->name);
+               /* We don't know what the locking state of the superblock is -
+                * if there is a superblock.
+                */
+               BUG();
+       }
+
        sb = fc->root->d_sb;
        WARN_ON(!sb->s_bdi);