blk-merge: fix computing bio->bi_seg_front_size in case of single segment
authorMing Lei <ming.lei@canonical.com>
Mon, 30 Nov 2015 08:05:49 +0000 (16:05 +0800)
committerJens Axboe <axboe@fb.com>
Mon, 30 Nov 2015 20:02:36 +0000 (13:02 -0700)
When bio has only one physical segment, we should set bio's
bi_seg_front_size as the real(final) size of the single segment.

Fixes: 02e707424c2ea(blk-merge: fix blk_bio_segment_split)
Reported-by: Markus Trippelsdorf <markus@trippelsdorf.de>
Tested-by: Markus Trippelsdorf <markus@trippelsdorf.de>
Signed-off-by: Ming Lei <ming.lei@canonical.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
block/blk-merge.c

index 41a55ba0d78e8a97b5707a9194cce3b6ebd1c811..e01405a3e8b3f51ce0424a844fadb3304bda5e44 100644 (file)
@@ -103,6 +103,9 @@ static struct bio *blk_bio_segment_split(struct request_queue *q,
                        bvprv = bv;
                        bvprvp = &bvprv;
                        sectors += bv.bv_len >> 9;
+
+                       if (nsegs == 1 && seg_size > front_seg_size)
+                               front_seg_size = seg_size;
                        continue;
                }
 new_segment: