OSDN Git Service

btrfs: tree-checker: use table values for stripe checks
authorDavid Sterba <dsterba@suse.com>
Mon, 26 Jul 2021 12:15:15 +0000 (14:15 +0200)
committerDavid Sterba <dsterba@suse.com>
Mon, 23 Aug 2021 11:19:02 +0000 (13:19 +0200)
There are hardcoded values in several checks regarding chunks and stripe
constraints. We have that defined in the raid table and ought to use it.

Reviewed-by: Qu Wenruo <wqu@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/tree-checker.c

index a8b2e0d..ac9416c 100644 (file)
@@ -873,13 +873,18 @@ int btrfs_check_chunk_valid(struct extent_buffer *leaf,
                }
        }
 
-       if (unlikely((type & BTRFS_BLOCK_GROUP_RAID10 && sub_stripes != 2) ||
-                    (type & BTRFS_BLOCK_GROUP_RAID1 && num_stripes != 2) ||
-                    (type & BTRFS_BLOCK_GROUP_RAID5 && num_stripes < 2) ||
-                    (type & BTRFS_BLOCK_GROUP_RAID6 && num_stripes < 3) ||
-                    (type & BTRFS_BLOCK_GROUP_DUP && num_stripes != 2) ||
+       if (unlikely((type & BTRFS_BLOCK_GROUP_RAID10 &&
+                     sub_stripes != btrfs_raid_array[BTRFS_RAID_RAID10].sub_stripes) ||
+                    (type & BTRFS_BLOCK_GROUP_RAID1 &&
+                     num_stripes != btrfs_raid_array[BTRFS_RAID_RAID1].devs_min) ||
+                    (type & BTRFS_BLOCK_GROUP_RAID5 &&
+                     num_stripes < btrfs_raid_array[BTRFS_RAID_RAID5].devs_min) ||
+                    (type & BTRFS_BLOCK_GROUP_RAID6 &&
+                     num_stripes < btrfs_raid_array[BTRFS_RAID_RAID6].devs_min) ||
+                    (type & BTRFS_BLOCK_GROUP_DUP &&
+                     num_stripes != btrfs_raid_array[BTRFS_RAID_DUP].dev_stripes) ||
                     ((type & BTRFS_BLOCK_GROUP_PROFILE_MASK) == 0 &&
-                     num_stripes != 1))) {
+                     num_stripes != btrfs_raid_array[BTRFS_RAID_SINGLE].dev_stripes))) {
                chunk_err(leaf, chunk, logical,
                        "invalid num_stripes:sub_stripes %u:%u for profile %llu",
                        num_stripes, sub_stripes,