When the current bvec can be merged to the 1st segment, the bio's front
segment size has to be updated.

However, dcebd755926b doesn't consider that case, then bio's front
segment size may not be correct.

This patch fixes this issue.

Cc: Christoph Hellwig <[email protected]>
Cc: Omar Sandoval <[email protected]>
Fixes: dcebd755926b ("block: use bio_for_each_bvec() to compute multi-page bvec 
count")
Signed-off-by: Ming Lei <[email protected]>
---
 block/blk-merge.c | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/block/blk-merge.c b/block/blk-merge.c
index 9402a7c3ba22..22467f475ab4 100644
--- a/block/blk-merge.c
+++ b/block/blk-merge.c
@@ -277,6 +277,9 @@ static struct bio *blk_bio_segment_split(struct 
request_queue *q,
                        bvprvp = &bvprv;
                        sectors += bv.bv_len >> 9;
 
+                       if (nsegs == 1 && seg_size > front_seg_size)
+                               front_seg_size = seg_size;
+
                        continue;
                }
 new_segment:
@@ -401,6 +404,11 @@ static unsigned int __blk_recalc_rq_segments(struct 
request_queue *q,
 
                                seg_size += bv.bv_len;
                                bvprv = bv;
+
+                               if (nr_phys_segs == 1 && seg_size >
+                                               front_seg_size)
+                                       front_seg_size = seg_size;
+
                                continue;
                        }
 new_segment:
-- 
2.9.5

Reply via email to