const unsigned int stripe_nsectors = stripe_len >> fs_info->sectorsize_bits;
        const unsigned int num_sectors = stripe_nsectors * real_stripes;
        struct btrfs_raid_bio *rbio;
-       int nr_data = 0;
        void *p;
 
        ASSERT(IS_ALIGNED(stripe_len, PAGE_SIZE));
        CONSUME_ALLOC(rbio->finish_pointers, real_stripes);
 #undef  CONSUME_ALLOC
 
-       if (bioc->map_type & BTRFS_BLOCK_GROUP_RAID5)
-               nr_data = real_stripes - 1;
-       else if (bioc->map_type & BTRFS_BLOCK_GROUP_RAID6)
-               nr_data = real_stripes - 2;
-       else
-               BUG();
+       ASSERT(btrfs_nr_parity_stripes(bioc->map_type));
+       rbio->nr_data = real_stripes - btrfs_nr_parity_stripes(bioc->map_type);
 
-       rbio->nr_data = nr_data;
        return rbio;
 }
 
 
        u8 stripe_nr;
 };
 
-static inline int nr_parity_stripes(const struct map_lookup *map)
-{
-       if (map->type & BTRFS_BLOCK_GROUP_RAID5)
-               return 1;
-       else if (map->type & BTRFS_BLOCK_GROUP_RAID6)
-               return 2;
-       else
-               return 0;
-}
-
 static inline int nr_data_stripes(const struct map_lookup *map)
 {
-       return map->num_stripes - nr_parity_stripes(map);
+       return map->num_stripes - btrfs_nr_parity_stripes(map->type);
 }
 
 #define RAID5_P_STRIPE ((u64)-2)
 
        return btrfs_raid_array[index].raid_name;
 }
 
+int btrfs_nr_parity_stripes(u64 type)
+{
+       enum btrfs_raid_types index = btrfs_bg_flags_to_raid_index(type);
+
+       return btrfs_raid_array[index].nparity;
+}
+
 /*
  * Fill @buf with textual description of @bg_flags, no more than @size_buf
  * bytes including terminating null byte.
 
 unsigned long btrfs_full_stripe_len(struct btrfs_fs_info *fs_info,
                                    u64 logical);
 u64 btrfs_calc_stripe_length(const struct extent_map *em);
+int btrfs_nr_parity_stripes(u64 type);
 int btrfs_chunk_alloc_add_chunk_item(struct btrfs_trans_handle *trans,
                                     struct btrfs_block_group *bg);
 int btrfs_remove_chunk(struct btrfs_trans_handle *trans, u64 chunk_offset);