diff --git a/block/bio.c b/block/bio.c index 0443694..f9bae56 100644 --- a/block/bio.c +++ b/block/bio.c @@ -744,6 +744,7 @@ static int __bio_add_page(struct request_queue *q, struct bio *bio, struct page } } + bio->bi_iter.bi_size += len; goto done; } } @@ -761,6 +762,7 @@ static int __bio_add_page(struct request_queue *q, struct bio *bio, struct page bvec->bv_offset = offset; bio->bi_vcnt++; bio->bi_phys_segments++; + bio->bi_iter.bi_size += len; /* * Perform a recount if the number of segments is greater @@ -802,7 +804,6 @@ static int __bio_add_page(struct request_queue *q, struct bio *bio, struct page bio->bi_flags &= ~(1 << BIO_SEG_VALID); done: - bio->bi_iter.bi_size += len; return len; failed: @@ -810,6 +811,7 @@ static int __bio_add_page(struct request_queue *q, struct bio *bio, struct page bvec->bv_len = 0; bvec->bv_offset = 0; bio->bi_vcnt--; + bio->bi_iter.bi_size -= len; blk_recount_segments(q, bio); return 0; }