@@ -286,10 +286,16 @@ static struct bio *blk_bio_segment_split(struct request_queue *q,
bvprv = bv;
bvprvp = &bvprv;
- if (bvec_split_segs(q, &bv, &nsegs, &seg_size,
- &front_seg_size, §ors))
+ if (bv.bv_offset + bv.bv_len <= PAGE_SIZE) {
+ nsegs++;
+ seg_size = bv.bv_len;
+ sectors += bv.bv_len >> 9;
+ if (nsegs == 1 && seg_size > front_seg_size)
+ front_seg_size = seg_size;
+ } else if (bvec_split_segs(q, &bv, &nsegs, &seg_size,
+ &front_seg_size, §ors)) {
goto split;
-
+ }
}
do_split = false;
Introduce a fast path for single-page bvec IO, then we can avoid to call bvec_split_segs() unnecessarily. Signed-off-by: Ming Lei <ming.lei@redhat.com> --- block/blk-merge.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-)