diff options
Diffstat (limited to 'fs/bio.c')
-rw-r--r-- | fs/bio.c | 13 |
1 files changed, 5 insertions, 8 deletions
@@ -507,10 +507,8 @@ int bio_get_nr_vecs(struct block_device *bdev) | |||
507 | int nr_pages; | 507 | int nr_pages; |
508 | 508 | ||
509 | nr_pages = ((queue_max_sectors(q) << 9) + PAGE_SIZE - 1) >> PAGE_SHIFT; | 509 | nr_pages = ((queue_max_sectors(q) << 9) + PAGE_SIZE - 1) >> PAGE_SHIFT; |
510 | if (nr_pages > queue_max_phys_segments(q)) | 510 | if (nr_pages > queue_max_segments(q)) |
511 | nr_pages = queue_max_phys_segments(q); | 511 | nr_pages = queue_max_segments(q); |
512 | if (nr_pages > queue_max_hw_segments(q)) | ||
513 | nr_pages = queue_max_hw_segments(q); | ||
514 | 512 | ||
515 | return nr_pages; | 513 | return nr_pages; |
516 | } | 514 | } |
@@ -557,7 +555,7 @@ static int __bio_add_page(struct request_queue *q, struct bio *bio, struct page | |||
557 | .bi_rw = bio->bi_rw, | 555 | .bi_rw = bio->bi_rw, |
558 | }; | 556 | }; |
559 | 557 | ||
560 | if (q->merge_bvec_fn(q, &bvm, prev) < len) { | 558 | if (q->merge_bvec_fn(q, &bvm, prev) != prev->bv_len) { |
561 | prev->bv_len -= len; | 559 | prev->bv_len -= len; |
562 | return 0; | 560 | return 0; |
563 | } | 561 | } |
@@ -575,8 +573,7 @@ static int __bio_add_page(struct request_queue *q, struct bio *bio, struct page | |||
575 | * make this too complex. | 573 | * make this too complex. |
576 | */ | 574 | */ |
577 | 575 | ||
578 | while (bio->bi_phys_segments >= queue_max_phys_segments(q) | 576 | while (bio->bi_phys_segments >= queue_max_segments(q)) { |
579 | || bio->bi_phys_segments >= queue_max_hw_segments(q)) { | ||
580 | 577 | ||
581 | if (retried_segments) | 578 | if (retried_segments) |
582 | return 0; | 579 | return 0; |
@@ -611,7 +608,7 @@ static int __bio_add_page(struct request_queue *q, struct bio *bio, struct page | |||
611 | * merge_bvec_fn() returns number of bytes it can accept | 608 | * merge_bvec_fn() returns number of bytes it can accept |
612 | * at this offset | 609 | * at this offset |
613 | */ | 610 | */ |
614 | if (q->merge_bvec_fn(q, &bvm, bvec) < len) { | 611 | if (q->merge_bvec_fn(q, &bvm, bvec) != bvec->bv_len) { |
615 | bvec->bv_page = NULL; | 612 | bvec->bv_page = NULL; |
616 | bvec->bv_len = 0; | 613 | bvec->bv_len = 0; |
617 | bvec->bv_offset = 0; | 614 | bvec->bv_offset = 0; |