On Mon, Jun 10, 2024 at 10:43:24AM +0000, John Garry wrote: > +static void blk_validate_atomic_write_limits(struct queue_limits *lim) > +{ > + unsigned int boundary_sectors_hw; > + > + if (!lim->atomic_write_hw_max) > + goto unsupported; > + > + boundary_sectors_hw = lim->atomic_write_hw_boundary >> SECTOR_SHIFT; > + > + if (boundary_sectors_hw) { > + /* It doesn't make sense to allow different non-zero values */ > + if (lim->chunk_sectors && > + lim->chunk_sectors != boundary_sectors_hw) > + goto unsupported; I'm not sure I follow why these two need to be the same. I can see checking for 'chunk_sectors % boundary_sectors_hw == 0', but am I missing something else? The reason I ask, zone block devices redefine the "chunk_sectors" to mean the zone size, and I'm pretty sure the typical zone size is much larger than the any common atomic write size.