diff options
author | Qu Wenruo <quwenruo@cn.fujitsu.com> | 2015-05-15 13:11:14 +0800 |
---|---|---|
committer | David Sterba <dsterba@suse.cz> | 2015-05-20 14:24:26 +0200 |
commit | 4643934109dd7483282d95b6e183a2d17189d7e6 (patch) | |
tree | 7beb0a9511df5120ff6b008a5dc6ebd38c2f26ce /volumes.c | |
parent | f146c40c65e0142b52418a0a1cbaf2808e658d76 (diff) |
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 <quwenruo@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
Diffstat (limited to 'volumes.c')
-rw-r--r-- | volumes.c | 11 |
1 files changed, 5 insertions, 6 deletions
@@ -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, |