On 11/1/24 14:21, Christoph Hellwig wrote: > Otherwise it can create unaligned writes on zoned devices. > > Fixes: a805a4fa4fa3 ("block: introduce zone_write_granularity limit") > Signed-off-by: Christoph Hellwig <hch@xxxxxx> > --- > block/blk-merge.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/block/blk-merge.c b/block/blk-merge.c > index d813d799cee7..d6895859a2fb 100644 > --- a/block/blk-merge.c > +++ b/block/blk-merge.c > @@ -358,7 +358,8 @@ int bio_split_rw_at(struct bio *bio, const struct queue_limits *lim, > * split size so that each bio is properly block size aligned, even if > * we do not use the full hardware limits. > */ > - bytes = ALIGN_DOWN(bytes, lim->logical_block_size); > + bytes = ALIGN_DOWN(bytes, lim->zone_write_granularity ? > + lim->zone_write_granularity : lim->logical_block_size); Nit: we could also do: bytes = ALIGN_DOWN(bytes, max(lim->logical_block_size, lim->zone_write_granularity)); Also, I wonder if we should leave read split as is based on the logical block size only ? Probably does not matter much... > > /* > * Bio splitting may cause subtle trouble such as hang when doing sync -- Damien Le Moal Western Digital Research