From 4643934109dd7483282d95b6e183a2d17189d7e6 Mon Sep 17 00:00:00 2001 From: Qu Wenruo Date: Fri, 15 May 2015 13:11:14 +0800 Subject: btrfs-progs: Fix a bug in chunk item extra check and allow degraded chunk. For DUP profile, the num_stripes should be 2 not 1. This causes btrfs offline tool fails on valid image. Also, num_stripes check is too restrict for btrfsck self test, as there is some image in degraded mode, so modify it to allow degraded chunk. Signed-off-by: Qu Wenruo Signed-off-by: David Sterba --- volumes.c | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/volumes.c b/volumes.c index 77cc305e..14ce33ef 100644 --- a/volumes.c +++ b/volumes.c @@ -1649,12 +1649,11 @@ static int read_one_chunk(struct btrfs_root *root, struct btrfs_key *key, /* * Device number check against profile */ - if ((map->type & BTRFS_BLOCK_GROUP_RAID10 && num_stripes < 4 && - map->sub_stripes < 2) || - (map->type & BTRFS_BLOCK_GROUP_RAID1 && num_stripes < 2) || - (map->type & BTRFS_BLOCK_GROUP_RAID5 && num_stripes < 3) || - (map->type & BTRFS_BLOCK_GROUP_RAID6 && num_stripes < 4) || - (map->type & BTRFS_BLOCK_GROUP_DUP && num_stripes != 1) || + if ((map->type & BTRFS_BLOCK_GROUP_RAID10 && map->sub_stripes == 0) || + (map->type & BTRFS_BLOCK_GROUP_RAID1 && num_stripes < 1) || + (map->type & BTRFS_BLOCK_GROUP_RAID5 && num_stripes < 2) || + (map->type & BTRFS_BLOCK_GROUP_RAID6 && num_stripes < 3) || + (map->type & BTRFS_BLOCK_GROUP_DUP && num_stripes > 2) || ((map->type & BTRFS_BLOCK_GROUP_PROFILE_MASK) == 0 && num_stripes != 1)) { fprintf(stderr, -- cgit v1.2.3