On Mon, Jun 23, 2025 at 10:02:54AM +0200, Christoph Hellwig wrote: > The virt_boundary_mask limit requires an unlimited max_segment_size for > bio splitting to not corrupt data. Historically, the block layer tried > to validate this, although the check was half-hearted until the addition > of the atomic queue limits API. The full blown check than triggered > issues with stacked devices incorrectly inheriting limits such as the > virt boundary and got disabled in commit b561ea56a264 ("block: allow > device to have both virt_boundary_mask and max segment size") instead of > fixing the issue properly. > > Ensure that the SCSI mid layer doesn't set the default low > max_segment_size limit for this case, and check for invalid > max_segment_size values in the host template, similar to the original > block layer check given that SCSI devices can't be stacked. > > This fixes reported data corruption on storvsc, although as far as I can > tell storvsc always failed to properly set the max_segment_size limit as > the SCSI APIs historically applied that when setting up the host, while > storvsc only set the virt_boundary_mask when configuring the scsi_device. > > Fixes: 81988a0e6b03 ("storvsc: get rid of bounce buffer") > Fixes: b561ea56a264 ("block: allow device to have both virt_boundary_mask and max segment size") > Reported-by: Ming Lei <ming.lei@xxxxxxxxxx> > Signed-off-by: Christoph Hellwig <hch@xxxxxx> Reviewed-by: Ming Lei <ming.lei@xxxxxxxxxx> Thanks, Ming