diff options
Diffstat (limited to 'fs')
| -rw-r--r-- | fs/bio-integrity.c | 3 | ||||
| -rw-r--r-- | fs/bio.c | 7 |
2 files changed, 8 insertions, 2 deletions
diff --git a/fs/bio-integrity.c b/fs/bio-integrity.c index 49a34e7f7306..a16f29e888cd 100644 --- a/fs/bio-integrity.c +++ b/fs/bio-integrity.c | |||
| @@ -61,7 +61,7 @@ static inline unsigned int vecs_to_idx(unsigned int nr) | |||
| 61 | 61 | ||
| 62 | static inline int use_bip_pool(unsigned int idx) | 62 | static inline int use_bip_pool(unsigned int idx) |
| 63 | { | 63 | { |
| 64 | if (idx == BIOVEC_NR_POOLS) | 64 | if (idx == BIOVEC_MAX_IDX) |
| 65 | return 1; | 65 | return 1; |
| 66 | 66 | ||
| 67 | return 0; | 67 | return 0; |
| @@ -95,6 +95,7 @@ struct bio_integrity_payload *bio_integrity_alloc_bioset(struct bio *bio, | |||
| 95 | 95 | ||
| 96 | /* Use mempool if lower order alloc failed or max vecs were requested */ | 96 | /* Use mempool if lower order alloc failed or max vecs were requested */ |
| 97 | if (bip == NULL) { | 97 | if (bip == NULL) { |
| 98 | idx = BIOVEC_MAX_IDX; /* so we free the payload properly later */ | ||
| 98 | bip = mempool_alloc(bs->bio_integrity_pool, gfp_mask); | 99 | bip = mempool_alloc(bs->bio_integrity_pool, gfp_mask); |
| 99 | 100 | ||
| 100 | if (unlikely(bip == NULL)) { | 101 | if (unlikely(bip == NULL)) { |
| @@ -542,13 +542,18 @@ static int __bio_add_page(struct request_queue *q, struct bio *bio, struct page | |||
| 542 | 542 | ||
| 543 | if (page == prev->bv_page && | 543 | if (page == prev->bv_page && |
| 544 | offset == prev->bv_offset + prev->bv_len) { | 544 | offset == prev->bv_offset + prev->bv_len) { |
| 545 | unsigned int prev_bv_len = prev->bv_len; | ||
| 545 | prev->bv_len += len; | 546 | prev->bv_len += len; |
| 546 | 547 | ||
| 547 | if (q->merge_bvec_fn) { | 548 | if (q->merge_bvec_fn) { |
| 548 | struct bvec_merge_data bvm = { | 549 | struct bvec_merge_data bvm = { |
| 550 | /* prev_bvec is already charged in | ||
| 551 | bi_size, discharge it in order to | ||
| 552 | simulate merging updated prev_bvec | ||
| 553 | as new bvec. */ | ||
| 549 | .bi_bdev = bio->bi_bdev, | 554 | .bi_bdev = bio->bi_bdev, |
| 550 | .bi_sector = bio->bi_sector, | 555 | .bi_sector = bio->bi_sector, |
| 551 | .bi_size = bio->bi_size, | 556 | .bi_size = bio->bi_size - prev_bv_len, |
| 552 | .bi_rw = bio->bi_rw, | 557 | .bi_rw = bio->bi_rw, |
| 553 | }; | 558 | }; |
| 554 | 559 | ||
