block: remove the same_page output argument to bvec_try_merge_page
authorChristoph Hellwig <hch@lst.de>
Mon, 12 May 2025 04:23:54 +0000 (06:23 +0200)
committerJens Axboe <axboe@kernel.dk>
Tue, 13 May 2025 18:09:32 +0000 (12:09 -0600)
commit77fd359b6dfdba58f476d5c17097bab024af9467
treeafdb4ff91f77371e22b9c0c5cb2bb6da063d1ace
parentd1ba22ab2becc8bf84d466791b970905abe99b23
block: remove the same_page output argument to bvec_try_merge_page

bvec_try_merge_page currently returns if the added page fragment is
within the same page as the last page in the last current bio_vec.

This information is used by __bio_iov_iter_get_pages so that we always
have a single folio pin per page even when the page is split over
multiple __bio_iov_iter_get_pages calls.

Threading this through the entire lowlevel add page to bio logic is
annoying and inefficient and leads to less code sharing than otherwise
possible.  Instead add code to __bio_iov_iter_get_pages that checks if
the bio_vecs did not change and thus a merge into the last segment must
have happened, and if there is an offset into the page for the currently
added fragment, because if yes we must have already had a previous
fragment of the same page in the last bio_vec.  While this is still a bit
ugly, it keeps the logic in the one place that needs it and allows for
more code sharing.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Link: https://lore.kernel.org/r/20250512042354.514329-1-hch@lst.de
Signed-off-by: Jens Axboe <axboe@kernel.dk>
block/bio-integrity.c
block/bio.c
block/blk.h