Max append sectors needs to be aligned to physical block size, otherwise we can end up in a situation where it's off by 1-3 sectors which would cause short writes with asynchronous zone append submissions from an FS. Signed-off-by: Johannes Thumshirn <johannes.thumshirn@xxxxxxx> --- block/blk-settings.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/block/blk-settings.c b/block/blk-settings.c index 9a2c23cd9700..d75c4cc34a7a 100644 --- a/block/blk-settings.c +++ b/block/blk-settings.c @@ -231,6 +231,7 @@ EXPORT_SYMBOL(blk_queue_max_write_zeroes_sectors); void blk_queue_max_zone_append_sectors(struct request_queue *q, unsigned int max_zone_append_sectors) { + unsigned int phys = queue_physical_block_size(q); unsigned int max_sectors; if (WARN_ON(!blk_queue_is_zoned(q))) @@ -246,6 +247,13 @@ void blk_queue_max_zone_append_sectors(struct request_queue *q, */ WARN_ON(!max_sectors); + /* + * Max append sectors needs to be aligned to physical block size, + * otherwise we can end up in a situation where it's off by 1-3 sectors + * which would cause short writes with asynchronous zone append + * submissions from an FS. + */ + max_sectors = ALIGN_DOWN(max_sectors << 9, phys) >> 9; q->limits.max_zone_append_sectors = max_sectors; } EXPORT_SYMBOL_GPL(blk_queue_max_zone_append_sectors); -- 2.26.2