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

@@ -427,24 +427,16 @@ blk_status_t btrfs_submit_compressed_write(struct btrfs_inode *inode, u64 start,
bio->bi_end_io = end_compressed_bio_write;
if (use_append) {
struct extent_map *em;
struct map_lookup *map;
struct block_device *bdev;
struct btrfs_device *device;
em = btrfs_get_chunk_map(fs_info, disk_start, PAGE_SIZE);
if (IS_ERR(em)) {
device = btrfs_zoned_get_device(fs_info, disk_start, PAGE_SIZE);
if (IS_ERR(device)) {
kfree(cb);
bio_put(bio);
return BLK_STS_NOTSUPP;
}
map = em->map_lookup;
/* We only support single profile for now */
ASSERT(map->num_stripes == 1);
bdev = map->stripes[0].dev->bdev;
bio_set_dev(bio, bdev);
free_extent_map(em);
bio_set_dev(bio, device->bdev);
}
if (blkcg_css) {