summaryrefslogtreecommitdiffstats
path: root/block/blk-merge.c
diff options
context:
space:
mode:
Diffstat (limited to 'block/blk-merge.c')
-rw-r--r--block/blk-merge.c29
1 files changed, 5 insertions, 24 deletions
diff --git a/block/blk-merge.c b/block/blk-merge.c
index 5e63e8259f92..42a46744c11b 100644
--- a/block/blk-merge.c
+++ b/block/blk-merge.c
@@ -21,9 +21,7 @@ static inline bool bios_segs_mergeable(struct request_queue *q,
21 struct bio *prev, struct bio_vec *prev_last_bv, 21 struct bio *prev, struct bio_vec *prev_last_bv,
22 struct bio_vec *next_first_bv) 22 struct bio_vec *next_first_bv)
23{ 23{
24 if (!biovec_phys_mergeable(prev_last_bv, next_first_bv)) 24 if (!biovec_phys_mergeable(q, prev_last_bv, next_first_bv))
25 return false;
26 if (!BIOVEC_SEG_BOUNDARY(q, prev_last_bv, next_first_bv))
27 return false; 25 return false;
28 if (prev->bi_seg_back_size + next_first_bv->bv_len > 26 if (prev->bi_seg_back_size + next_first_bv->bv_len >
29 queue_max_segment_size(q)) 27 queue_max_segment_size(q))
@@ -199,9 +197,7 @@ static struct bio *blk_bio_segment_split(struct request_queue *q,
199 if (bvprvp && blk_queue_cluster(q)) { 197 if (bvprvp && blk_queue_cluster(q)) {
200 if (seg_size + bv.bv_len > queue_max_segment_size(q)) 198 if (seg_size + bv.bv_len > queue_max_segment_size(q))
201 goto new_segment; 199 goto new_segment;
202 if (!biovec_phys_mergeable(bvprvp, &bv)) 200 if (!biovec_phys_mergeable(q, bvprvp, &bv))
203 goto new_segment;
204 if (!BIOVEC_SEG_BOUNDARY(q, bvprvp, &bv))
205 goto new_segment; 201 goto new_segment;
206 202
207 seg_size += bv.bv_len; 203 seg_size += bv.bv_len;
@@ -332,9 +328,7 @@ static unsigned int __blk_recalc_rq_segments(struct request_queue *q,
332 if (seg_size + bv.bv_len 328 if (seg_size + bv.bv_len
333 > queue_max_segment_size(q)) 329 > queue_max_segment_size(q))
334 goto new_segment; 330 goto new_segment;
335 if (!biovec_phys_mergeable(&bvprv, &bv)) 331 if (!biovec_phys_mergeable(q, &bvprv, &bv))
336 goto new_segment;
337 if (!BIOVEC_SEG_BOUNDARY(q, &bvprv, &bv))
338 goto new_segment; 332 goto new_segment;
339 333
340 seg_size += bv.bv_len; 334 seg_size += bv.bv_len;
@@ -414,17 +408,7 @@ static int blk_phys_contig_segment(struct request_queue *q, struct bio *bio,
414 bio_get_last_bvec(bio, &end_bv); 408 bio_get_last_bvec(bio, &end_bv);
415 bio_get_first_bvec(nxt, &nxt_bv); 409 bio_get_first_bvec(nxt, &nxt_bv);
416 410
417 if (!biovec_phys_mergeable(&end_bv, &nxt_bv)) 411 return biovec_phys_mergeable(q, &end_bv, &nxt_bv);
418 return 0;
419
420 /*
421 * bio and nxt are contiguous in memory; check if the queue allows
422 * these two to be merged into one
423 */
424 if (BIOVEC_SEG_BOUNDARY(q, &end_bv, &nxt_bv))
425 return 1;
426
427 return 0;
428} 412}
429 413
430static inline void 414static inline void
@@ -438,10 +422,7 @@ __blk_segment_map_sg(struct request_queue *q, struct bio_vec *bvec,
438 if (*sg && *cluster) { 422 if (*sg && *cluster) {
439 if ((*sg)->length + nbytes > queue_max_segment_size(q)) 423 if ((*sg)->length + nbytes > queue_max_segment_size(q))
440 goto new_segment; 424 goto new_segment;
441 425 if (!biovec_phys_mergeable(q, bvprv, bvec))
442 if (!biovec_phys_mergeable(bvprv, bvec))
443 goto new_segment;
444 if (!BIOVEC_SEG_BOUNDARY(q, bvprv, bvec))
445 goto new_segment; 426 goto new_segment;
446 427
447 (*sg)->length += nbytes; 428 (*sg)->length += nbytes;