btrfs: factor out helper for single device IO check
The check in btrfs_map_block() deciding if a particular I/O is targeting a single device is getting more and more convoluted. Factor out the check conditions into a helper function, with no functional change otherwise. Reviewed-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Johannes Thumshirn <johannes.thumshirn@wdc.com> Reviewed-by: David Sterba <dsterba@suse.com> Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
parent
96c36eaa77
commit
02d05b6416
@ -6330,6 +6330,27 @@ static int set_io_stripe(struct btrfs_fs_info *fs_info, enum btrfs_map_op op,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static bool is_single_device_io(struct btrfs_fs_info *fs_info,
|
||||
const struct btrfs_io_stripe *smap,
|
||||
const struct btrfs_chunk_map *map,
|
||||
int num_alloc_stripes,
|
||||
enum btrfs_map_op op, int mirror_num)
|
||||
{
|
||||
if (!smap)
|
||||
return false;
|
||||
|
||||
if (num_alloc_stripes != 1)
|
||||
return false;
|
||||
|
||||
if (btrfs_need_stripe_tree_update(fs_info, map->type) && op != BTRFS_MAP_READ)
|
||||
return false;
|
||||
|
||||
if ((map->type & BTRFS_BLOCK_GROUP_RAID56_MASK) && mirror_num > 1)
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/*
|
||||
* Map one logical range to one or more physical ranges.
|
||||
*
|
||||
@ -6532,10 +6553,8 @@ int btrfs_map_block(struct btrfs_fs_info *fs_info, enum btrfs_map_op op,
|
||||
* physical block information on the stack instead of allocating an
|
||||
* I/O context structure.
|
||||
*/
|
||||
if (smap && num_alloc_stripes == 1 &&
|
||||
!(btrfs_need_stripe_tree_update(fs_info, map->type) &&
|
||||
op != BTRFS_MAP_READ) &&
|
||||
!((map->type & BTRFS_BLOCK_GROUP_RAID56_MASK) && mirror_num > 1)) {
|
||||
if (is_single_device_io(fs_info, smap, map, num_alloc_stripes, op,
|
||||
mirror_num)) {
|
||||
ret = set_io_stripe(fs_info, op, logical, length, smap, map,
|
||||
stripe_index, stripe_offset, stripe_nr);
|
||||
if (mirror_num_ret)
|
||||
|
Loading…
x
Reference in New Issue
Block a user