OSDN Git Service

btrfs: unify the ro checking for mount options
authorJosef Bacik <josef@toxicpanda.com>
Fri, 16 Oct 2020 15:29:13 +0000 (11:29 -0400)
committerDavid Sterba <dsterba@suse.com>
Tue, 8 Dec 2020 14:53:39 +0000 (15:53 +0100)
We're going to be adding more options that require RDONLY, so add a
helper to do the check and error out if we don't have RDONLY set.

Reviewed-by: Johannes Thumshirn <johannes.thumshirn@wdc.com>
Reviewed-by: Qu Wenruo <wqu@suse.com>
Signed-off-by: Josef Bacik <josef@toxicpanda.com>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/super.c

index 8840a4f..f99e89e 100644 (file)
@@ -458,6 +458,17 @@ static const match_table_t rescue_tokens = {
        {Opt_err, NULL},
 };
 
+static bool check_ro_option(struct btrfs_fs_info *fs_info, unsigned long opt,
+                           const char *opt_name)
+{
+       if (fs_info->mount_opt & opt) {
+               btrfs_err(fs_info, "%s must be used with ro mount option",
+                         opt_name);
+               return true;
+       }
+       return false;
+}
+
 static int parse_rescue_options(struct btrfs_fs_info *info, const char *options)
 {
        char *opts;
@@ -968,14 +979,12 @@ int btrfs_parse_options(struct btrfs_fs_info *info, char *options,
                }
        }
 check:
-       /*
-        * Extra check for current option against current flag
-        */
-       if (btrfs_test_opt(info, NOLOGREPLAY) && !(new_flags & SB_RDONLY)) {
-               btrfs_err(info,
-                         "nologreplay must be used with ro mount option");
+       /* 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"))
                ret = -EINVAL;
-       }
 out:
        if (btrfs_fs_compat_ro(info, FREE_SPACE_TREE) &&
            !btrfs_test_opt(info, FREE_SPACE_TREE) &&