On 11/19/24 09:27, Bart Van Assche wrote: > Many but not all storage controllers require serialization of zoned > writes. Introduce a new request queue limit member variable related to > write serialization. 'driver_preserves_write_order' allows block drivers > to indicate that the order of write commands is preserved per hardware > queue and hence that serialization of writes per zone is not required if > all pending writes are submitted to the same hardware queue. > > Cc: Damien Le Moal <dlemoal@xxxxxxxxxx> > Cc: Hannes Reinecke <hare@xxxxxxx> > Cc: Nitesh Shetty <nj.shetty@xxxxxxxxxxx> > Cc: Christoph Hellwig <hch@xxxxxx> > Cc: Ming Lei <ming.lei@xxxxxxxxxx> > Signed-off-by: Bart Van Assche <bvanassche@xxxxxxx> > --- > block/blk-settings.c | 2 ++ > include/linux/blkdev.h | 5 +++++ > 2 files changed, 7 insertions(+) > > diff --git a/block/blk-settings.c b/block/blk-settings.c > index f1d4dfdc37a7..329d8b65a8d7 100644 > --- a/block/blk-settings.c > +++ b/block/blk-settings.c > @@ -633,6 +633,8 @@ int blk_stack_limits(struct queue_limits *t, struct queue_limits *b, > } > t->max_secure_erase_sectors = min_not_zero(t->max_secure_erase_sectors, > b->max_secure_erase_sectors); > + t->driver_preserves_write_order = t->driver_preserves_write_order && > + b->driver_preserves_write_order; > t->zone_write_granularity = max(t->zone_write_granularity, > b->zone_write_granularity); > if (!(t->features & BLK_FEAT_ZONED)) { > diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h > index a1fd0ddce5cf..72be33d02d1f 100644 > --- a/include/linux/blkdev.h > +++ b/include/linux/blkdev.h > @@ -397,6 +397,11 @@ struct queue_limits { > > unsigned int max_open_zones; > unsigned int max_active_zones; > + /* > + * Whether or not the block driver preserves the order of write > + * requests. Set by the block driver. > + */ > + bool driver_preserves_write_order; Why not make this a q->features flag ? > > /* > * Drivers that set dma_alignment to less than 511 must be prepared to -- Damien Le Moal Western Digital Research