diff --git a/block/bio.c b/block/bio.c index 0443694..6872849 100644 --- a/block/bio.c +++ b/block/bio.c @@ -761,6 +761,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 +803,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 +810,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; }