[PATCH v6 12/28] dm: Use the block layer zone append emulation

Mike Snitzer snitzer at kernel.org
Fri Apr 5 08:46:44 PDT 2024


On Fri, Apr 05 2024 at 12:41P -0400,
Damien Le Moal <dlemoal at kernel.org> wrote:

> For targets requiring zone append operation emulation with regular
> writes (e.g. dm-crypt), we can use the block layer emulation provided by
> zone write plugging. Remove DM implemented zone append emulation and
> enable the block layer one.
> 
> This is done by setting the max_zone_append_sectors limit of the
> mapped device queue to 0 for mapped devices that have a target table
> that cannot support native zone append operations (e.g. dm-crypt).
> Such mapped devices are flagged with the DMF_EMULATE_ZONE_APPEND flag.
> dm_split_and_process_bio() is modified to execute
> blk_zone_write_plug_bio() for such device to let the block layer
> transform zone append operations into regular writes.  This is done
> after ensuring that the submitted BIO is split if it straddles zone
> boundaries. Both changes are implemented unsing the inline helpers
> dm_zone_write_plug_bio() and dm_zone_bio_needs_split() respectively.
> 
> dm_revalidate_zones() is also modified to use the block layer provided
> function blk_revalidate_disk_zones() so that all zone resources needed
> for zone append emulation are initialized by the block layer without DM
> core needing to do anything. Since the device table is not yet live when
> dm_revalidate_zones() is executed, enabling the use of
> blk_revalidate_disk_zones() requires adding a pointer to the device
> table in struct mapped_device. This avoids errors in
> dm_blk_report_zones() trying to get the table with dm_get_live_table().
> The mapped device table pointer is set to the table passed as argument
> to dm_revalidate_zones() before calling blk_revalidate_disk_zones() and
> reset to NULL after this function returns to restore the live table
> handling for user call of report zones.
> 
> All the code related to zone append emulation is removed from
> dm-zone.c. This leads to simplifications of the functions __map_bio()
> and dm_zone_endio(). This later function now only needs to deal with
> completions of real zone append operations for targets that support it.
> 
> Signed-off-by: Damien Le Moal <dlemoal at kernel.org>
> Reviewed-by: Mike Snitzer <snitzer at kernel.org>
> Reviewed-by: Hannes Reinecke <hare at suse.de>
> Tested-by: Hans Holmberg <hans.holmberg at wdc.com>
> ---
>  drivers/md/dm-core.h |   2 +-
>  drivers/md/dm-zone.c | 476 ++++---------------------------------------
>  drivers/md/dm.c      |  72 ++++---
>  drivers/md/dm.h      |   4 +-
>  4 files changed, 94 insertions(+), 460 deletions(-)
> 
> diff --git a/drivers/md/dm-zone.c b/drivers/md/dm-zone.c
> index eb9832b22b14..174fda0a301c 100644
> --- a/drivers/md/dm-zone.c
> +++ b/drivers/md/dm-zone.c
> @@ -226,41 +154,32 @@ static int dm_zone_revalidate_cb(struct blk_zone *zone, unsigned int idx,
>  static int dm_revalidate_zones(struct mapped_device *md, struct dm_table *t)
>  {
>  	struct gendisk *disk = md->disk;
> -	unsigned int noio_flag;
>  	int ret;
>  
> -	/*
> -	 * Check if something changed. If yes, cleanup the current resources
> -	 * and reallocate everything.
> -	 */
> +	/* Revalidate ionly if something changed. */

Just noticed this ionly typo ^ Please fix.

Thanks,
Mike



More information about the Linux-nvme mailing list