block: fix aligning of bounced dio read bios
authorChristoph Hellwig <hch@lst.de>
Thu, 16 Jul 2026 09:12:46 +0000 (11:12 +0200)
committerJens Axboe <axboe@kernel.dk>
Thu, 16 Jul 2026 12:11:37 +0000 (06:11 -0600)
commitdf308a14585649f7683a560f5c94978ab4f8224d
tree96dee5a13c2368dd912d386ae4e3c231ad8b4657
parent4f221efff9b32fb4206f8db240a2b35a7d27696d
block: fix aligning of bounced dio read bios

bio_iov_iter_align_down expects the "normal" biovec layout from vector 0,
while bio_iov_iter_bounce_read abuses vector 0 for a bounce buffer
allocation.  Pass an explicit bvec to bio_iov_iter_align_down to deal
with this case to avoid a double unpin.

Additionally we need to free the folio if no bio_vec could be added,
and adjust the size of the first bio_vec that contains the bounce buffer
when the I/O size is aligned down.

Fixes: e7b8b3c5b2a6 ("block: align down bounces bios")
Reported-by: 0wnerD1ed <l7z@0b1t.tech>
Signed-off-by: Christoph Hellwig <hch@lst.de>
Tested-by: 0wnerD1ed <l7z@0b1t.tech>
Reviewed-by: Keith Busch <kbusch@kernel.org>
Link: https://patch.msgid.link/20260716091306.316625-3-hch@lst.de
Signed-off-by: Jens Axboe <axboe@kernel.dk>
block/bio.c