@@ -328,6 +328,29 @@ int bio_split_io_at(struct bio *bio, const struct queue_limits *lim, unsigned nsegs = 0, bytes = 0, gaps = 0; struct bvec_iter iter;
if (bio_flagged(bio, BIO_DMA_TOKEN)) {int offset = offset_in_page(bio->bi_iter.bi_bvec_done);nsegs = ALIGN(bio->bi_iter.bi_size + offset, PAGE_SIZE);nsegs >>= PAGE_SHIFT;if (offset & lim->dma_alignment || bytes & len_align_mask)return -EINVAL;
bytes == 0 is a dead check here. Probably you would like to check the length of the first and last segment to match with what the normal path below is doing.