On Mon, Jul 01, 2019 at 12:16:44PM +0800, Ming Lei wrote:
'bio->bi_iter.bi_size' is 'unsigned int', which at most hold 4G - 1 bytes.
Before 07173c3ec276 ("block: enable multipage bvecs"), one bio can include very limited pages, and usually at most 256, so the fs bio size won't be bigger than 1M bytes most of times.
Since we support multi-page bvec, in theory one fs bio really can be added > 1M pages, especially in case of hugepage, or big writeback in case of huge dirty pages. Then there is chance in which .bi_size is overflowed.
Fixes this issue by adding bio_will_full() which checks if the added segment may overflow .bi_size.
Can you please just add the argument to bio_full? bio_will_full sounds rather odd.
Maybe also add a kerneldoc comment to the new bio_full to explain it. Otherwise this looks fine to me.