btrfs: consolidate uuid comparisons in btrfs_validate_super
authorAnand Jain <anand.jain@oracle.com>
Wed, 24 May 2023 12:02:42 +0000 (20:02 +0800)
committerDavid Sterba <dsterba@suse.com>
Mon, 19 Jun 2023 11:59:29 +0000 (13:59 +0200)
There are three ways the fsid is validated in btrfs_validate_super():

- verify that super_copy::fsid is the same as fs_devices::fsid

- if the metadata_uuid flag is set, verify if super_copy::metadata_uuid
  and fs_devices::metadata_uuid are the same.

- a few lines below, often missed out, verify if dev_item::fsid is the
  same as fs_devices::metadata_uuid.

The function btrfs_validate_super() contains multiple if-statements with
memcmp() to check UUIDs. This patch consolidates them into a single
location.

Signed-off-by: Anand Jain <anand.jain@oracle.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/disk-io.c

index 8102d2a..6e0d4f9 100644 (file)
@@ -2399,6 +2399,14 @@ int btrfs_validate_super(struct btrfs_fs_info *fs_info,
                ret = -EINVAL;
        }
 
+       if (memcmp(fs_info->fs_devices->metadata_uuid, sb->dev_item.fsid,
+                  BTRFS_FSID_SIZE) != 0) {
+               btrfs_err(fs_info,
+                       "dev_item UUID does not match metadata fsid: %pU != %pU",
+                       fs_info->fs_devices->metadata_uuid, sb->dev_item.fsid);
+               ret = -EINVAL;
+       }
+
        /*
         * Artificial requirement for block-group-tree to force newer features
         * (free-space-tree, no-holes) so the test matrix is smaller.
@@ -2411,14 +2419,6 @@ int btrfs_validate_super(struct btrfs_fs_info *fs_info,
                ret = -EINVAL;
        }
 
-       if (memcmp(fs_info->fs_devices->metadata_uuid, sb->dev_item.fsid,
-                  BTRFS_FSID_SIZE) != 0) {
-               btrfs_err(fs_info,
-                       "dev_item UUID does not match metadata fsid: %pU != %pU",
-                       fs_info->fs_devices->metadata_uuid, sb->dev_item.fsid);
-               ret = -EINVAL;
-       }
-
        /*
         * Hint to catch really bogus numbers, bitflips or so, more exact checks are
         * done later