On Tue, Apr 09, 2024 at 03:57:58PM +0200, Christoph Hellwig wrote: > On Mon, Apr 08, 2024 at 05:48:02PM +0800, Ming Lei wrote: > > The limit is from commit 09324d32d2a0 ("block: force an unlimited segment > > size on queues with a virt boundary") which claims to fix f6970f83ef79 > > ("block: don't check if adjacent bvecs in one bio can be mergeable"). > > > > However commit f6970f83ef79 only covers merge code which isn't used by > > bio driver at all, so not sure pre-6.9-rc is broken for stacking driver. > > We can stack rq drivers as well. > > > Also commit 09324d32d2a0 mentioned that it did not cause problem, > > actually 64K default segment size limits always exists even though the > > device doesn't provide one, so looks there isn't report as 'real bugs', > > or maybe I miss something? > > The problem is when the segment size does not align to the boundary > mask as you'll now start feeding malformed segments/entris to the > device. In case of single bio, this bio will be split with max segment size if segment size doesn't align with virt boundary, so the resulted bio is still valid because virt-boundary allows the last bvec to be unaligned. In case of bio merge, bio_will_gap() is always called to make sure there isn't gap between the two bios wrt. virt boundary. Can you explain a bit how one malformed bio is made? Thanks, Ming