diff --git a/block/bio.c b/block/bio.c
index 4347b0240..7bccceb22 100755
--- a/block/bio.c
+++ b/block/bio.c
@@ -774,7 +774,7 @@ static bool bio_try_merge_hw_seg(struct request_queue *q, struct bio *bio,
 
 	if ((addr1 | mask) != (addr2 | mask))
 		return false;
-	if (bv->bv_len + len > queue_max_segment_size(q))
+	if (len > queue_max_segment_size(q) - bv->bv_len)
 		return false;
 	return __bio_try_merge_page(bio, page, len, offset, same_page);
 }