btrfs: drop redundant check to use fs_devices::metadata_uuid
authorAnand Jain <anand.jain@oracle.com>
Mon, 31 Jul 2023 11:16:36 +0000 (19:16 +0800)
committerDavid Sterba <dsterba@suse.com>
Mon, 21 Aug 2023 12:54:48 +0000 (14:54 +0200)
fs_devices::metadata_uuid value is already updated based on the
super_block::METADATA_UUID flag for either fsid or metadata_uuid as
appropriate. So, fs_devices::metadata_uuid can be used directly.

Reviewed-by: Johannes Thumshirn <johannes.thumshirn@wdc.com>
Tested-by: Guilherme G. Piccoli <gpiccoli@igalia.com>
Signed-off-by: Anand Jain <anand.jain@oracle.com>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/disk-io.c

index 32ec651..0a96ea8 100644 (file)
@@ -313,21 +313,16 @@ static bool check_tree_block_fsid(struct extent_buffer *eb)
        struct btrfs_fs_info *fs_info = eb->fs_info;
        struct btrfs_fs_devices *fs_devices = fs_info->fs_devices, *seed_devs;
        u8 fsid[BTRFS_FSID_SIZE];
-       u8 *metadata_uuid;
 
        read_extent_buffer(eb, fsid, offsetof(struct btrfs_header, fsid),
                           BTRFS_FSID_SIZE);
+
        /*
-        * Checking the incompat flag is only valid for the current fs. For
-        * seed devices it's forbidden to have their uuid changed so reading
-        * ->fsid in this case is fine
+        * alloc_fs_devices() copies the fsid into metadata_uuid if the
+        * metadata_uuid is unset in the superblock, including for a seed device.
+        * So, we can use fs_devices->metadata_uuid.
         */
-       if (btrfs_fs_incompat(fs_info, METADATA_UUID))
-               metadata_uuid = fs_devices->metadata_uuid;
-       else
-               metadata_uuid = fs_devices->fsid;
-
-       if (!memcmp(fsid, metadata_uuid, BTRFS_FSID_SIZE))
+       if (memcmp(fsid, fs_info->fs_devices->metadata_uuid, BTRFS_FSID_SIZE) == 0)
                return false;
 
        list_for_each_entry(seed_devs, &fs_devices->seed_list, seed_list)