return false;
 }
 
+static bool check_options(struct btrfs_fs_info *info, unsigned long flags)
+{
+       bool ret = true;
+
+       if (!(flags & SB_RDONLY) &&
+           (check_ro_option(info, BTRFS_MOUNT_NOLOGREPLAY, "nologreplay") ||
+            check_ro_option(info, BTRFS_MOUNT_IGNOREBADROOTS, "ignorebadroots") ||
+            check_ro_option(info, BTRFS_MOUNT_IGNOREDATACSUMS, "ignoredatacsums")))
+               ret = false;
+
+       if (btrfs_fs_compat_ro(info, FREE_SPACE_TREE) &&
+           !btrfs_test_opt(info, FREE_SPACE_TREE) &&
+           !btrfs_test_opt(info, CLEAR_CACHE)) {
+               btrfs_err(info, "cannot disable free-space-tree");
+               ret = false;
+       }
+       if (btrfs_fs_compat_ro(info, BLOCK_GROUP_TREE) &&
+            !btrfs_test_opt(info, FREE_SPACE_TREE)) {
+               btrfs_err(info, "cannot disable free-space-tree with block-group-tree feature");
+               ret = false;
+       }
+
+       if (btrfs_check_mountopts_zoned(info))
+               ret = false;
+
+       if (!test_bit(BTRFS_FS_STATE_REMOUNTING, &info->fs_state)) {
+               if (btrfs_test_opt(info, SPACE_CACHE))
+                       btrfs_info(info, "disk space caching is enabled");
+               if (btrfs_test_opt(info, FREE_SPACE_TREE))
+                       btrfs_info(info, "using free-space-tree");
+       }
+
+       return ret;
+}
+
 static int parse_rescue_options(struct btrfs_fs_info *info, const char *options)
 {
        char *opts;
        int saved_compress_level;
        bool saved_compress_force;
        int no_compress = 0;
-       const bool remounting = test_bit(BTRFS_FS_STATE_REMOUNTING, &info->fs_state);
 
        if (btrfs_fs_compat_ro(info, FREE_SPACE_TREE))
                btrfs_set_opt(info->mount_opt, FREE_SPACE_TREE);
         * against new flags
         */
        if (!options)
-               goto check;
+               goto out;
 
        while ((p = strsep(&options, ",")) != NULL) {
                int token;
                        break;
                }
        }
-check:
-       /* We're read-only, don't have to check. */
-       if (new_flags & SB_RDONLY)
-               goto out;
-
-       if (check_ro_option(info, BTRFS_MOUNT_NOLOGREPLAY, "nologreplay") ||
-           check_ro_option(info, BTRFS_MOUNT_IGNOREBADROOTS, "ignorebadroots") ||
-           check_ro_option(info, BTRFS_MOUNT_IGNOREDATACSUMS, "ignoredatacsums"))
-               ret = -EINVAL;
 out:
-       if (btrfs_fs_compat_ro(info, FREE_SPACE_TREE) &&
-           !btrfs_test_opt(info, FREE_SPACE_TREE) &&
-           !btrfs_test_opt(info, CLEAR_CACHE)) {
-               btrfs_err(info, "cannot disable free space tree");
+       if (!ret && !check_options(info, new_flags))
                ret = -EINVAL;
-       }
-       if (btrfs_fs_compat_ro(info, BLOCK_GROUP_TREE) &&
-            !btrfs_test_opt(info, FREE_SPACE_TREE)) {
-               btrfs_err(info, "cannot disable free space tree with block-group-tree feature");
-               ret = -EINVAL;
-       }
-       if (!ret)
-               ret = btrfs_check_mountopts_zoned(info);
-       if (!ret && !remounting) {
-               if (btrfs_test_opt(info, SPACE_CACHE))
-                       btrfs_info(info, "disk space caching is enabled");
-               if (btrfs_test_opt(info, FREE_SPACE_TREE))
-                       btrfs_info(info, "using free space tree");
-       }
        return ret;
 }