btrfs: zoned: factor out zoned device lookup

To be able to construct a zone append bio we need to look up the
btrfs_device. The code doing the chunk map lookup to get the device is
present in btrfs_submit_compressed_write and submit_extent_page.

Factor out the lookup calls into a helper and use it in the submission
paths.

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:
Johannes Thumshirn 2021-05-19 00:40:29 +09:00 committed by David Sterba
parent 50535db8fb
commit e7ff9e6b8e
4 changed files with 39 additions and 23 deletions

View file

@ -3266,19 +3266,13 @@ static int submit_extent_page(unsigned int opf,
wbc_account_cgroup_owner(wbc, page, io_size);
}
if (btrfs_is_zoned(fs_info) && bio_op(bio) == REQ_OP_ZONE_APPEND) {
struct extent_map *em;
struct map_lookup *map;
struct btrfs_device *device;
em = btrfs_get_chunk_map(fs_info, disk_bytenr, io_size);
if (IS_ERR(em))
return PTR_ERR(em);
device = btrfs_zoned_get_device(fs_info, disk_bytenr, io_size);
if (IS_ERR(device))
return PTR_ERR(device);
map = em->map_lookup;
/* We only support single profile for now */
ASSERT(map->num_stripes == 1);
btrfs_io_bio(bio)->device = map->stripes[0].dev;
free_extent_map(em);
btrfs_io_bio(bio)->device = device;
}
*bio_ret = bio;