diff options
Diffstat (limited to 'block/blk-merge.c')
-rw-r--r-- | block/blk-merge.c | 29 |
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 | ||
430 | static inline void | 414 | static 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; |