|
@@ -542,13 +542,18 @@ static int __bio_add_page(struct request_queue *q, struct bio *bio, struct page
|
|
|
|
|
|
if (page == prev->bv_page &&
|
|
|
offset == prev->bv_offset + prev->bv_len) {
|
|
|
+ unsigned int prev_bv_len = prev->bv_len;
|
|
|
prev->bv_len += len;
|
|
|
|
|
|
if (q->merge_bvec_fn) {
|
|
|
struct bvec_merge_data bvm = {
|
|
|
+ /* prev_bvec is already charged in
|
|
|
+ bi_size, discharge it in order to
|
|
|
+ simulate merging updated prev_bvec
|
|
|
+ as new bvec. */
|
|
|
.bi_bdev = bio->bi_bdev,
|
|
|
.bi_sector = bio->bi_sector,
|
|
|
- .bi_size = bio->bi_size,
|
|
|
+ .bi_size = bio->bi_size - prev_bv_len,
|
|
|
.bi_rw = bio->bi_rw,
|
|
|
};
|
|
|
|