[PATCH V9 1/9] block: export bio_add_hw_pages()
Damien Le Moal
Damien.LeMoal at wdc.com
Tue Jan 12 00:40:21 EST 2021
On 2021/01/12 13:26, Chaitanya Kulkarni wrote:
> To implement the NVMe Zone Append command on the NVMeOF target side for
> generic Zoned Block Devices with NVMe Zoned Namespaces interface, we
> need to build the bios with hardware limitations, i.e. we use
> bio_add_hw_page() with queue_max_zone_append_sectors() instead of
> bio_add_page().
>
> Without this API being exported NVMeOF target will require to use
> bio_add_hw_page() caller bio_iov_iter_get_pages(). That results in
> extra work which is inefficient.
>
> Export the API so that NVMeOF ZBD over ZNS backend can use it to build
> Zone Append bios.
>
> Signed-off-by: Chaitanya Kulkarni <chaitanya.kulkarni at wdc.com>
> ---
> block/bio.c | 1 +
> block/blk.h | 4 ----
> include/linux/blkdev.h | 4 ++++
> 3 files changed, 5 insertions(+), 4 deletions(-)
>
> diff --git a/block/bio.c b/block/bio.c
> index 1f2cc1fbe283..5cbd56b54f98 100644
> --- a/block/bio.c
> +++ b/block/bio.c
> @@ -826,6 +826,7 @@ int bio_add_hw_page(struct request_queue *q, struct bio *bio,
> bio->bi_iter.bi_size += len;
> return len;
> }
> +EXPORT_SYMBOL(bio_add_hw_page);
>
> /**
> * bio_add_pc_page - attempt to add page to passthrough bio
> diff --git a/block/blk.h b/block/blk.h
> index 7550364c326c..200030b2d74f 100644
> --- a/block/blk.h
> +++ b/block/blk.h
> @@ -351,8 +351,4 @@ int bdev_resize_partition(struct block_device *bdev, int partno,
> sector_t start, sector_t length);
> int disk_expand_part_tbl(struct gendisk *disk, int target);
>
> -int bio_add_hw_page(struct request_queue *q, struct bio *bio,
> - struct page *page, unsigned int len, unsigned int offset,
> - unsigned int max_sectors, bool *same_page);
> -
> #endif /* BLK_INTERNAL_H */
> diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h
> index 070de09425ad..028ccc9bdf8d 100644
> --- a/include/linux/blkdev.h
> +++ b/include/linux/blkdev.h
> @@ -2005,6 +2005,10 @@ struct block_device *I_BDEV(struct inode *inode);
> struct block_device *bdgrab(struct block_device *bdev);
> void bdput(struct block_device *);
>
> +int bio_add_hw_page(struct request_queue *q, struct bio *bio,
> + struct page *page, unsigned int len, unsigned int offset,
> + unsigned int max_sectors, bool *same_page);
> +
> #ifdef CONFIG_BLOCK
> void invalidate_bdev(struct block_device *bdev);
> int truncate_bdev_range(struct block_device *bdev, fmode_t mode, loff_t lstart,
>
Looks good.
Reviewed-by: Damien Le Moal <damien.lemoal at wdc.com>
--
Damien Le Moal
Western Digital Research
More information about the Linux-nvme
mailing list