Skip to content

Commit

Permalink
block: bounce: avoid direct access to bvec table
Browse files Browse the repository at this point in the history
We will support multipage bvecs in the future, so change to iterator way
for getting bv_page of bvec from original bio.

Cc: Matthew Wilcox <willy@infradead.org>
Signed-off-by: Ming Lei <ming.lei@redhat.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
  • Loading branch information
Ming Lei authored and Jens Axboe committed Jan 6, 2018
1 parent c45a8f2 commit 7891f05
Showing 1 changed file with 8 additions and 9 deletions.
17 changes: 8 additions & 9 deletions block/bounce.c
Original file line number Diff line number Diff line change
Expand Up @@ -137,21 +137,20 @@ static void copy_to_high_bio_irq(struct bio *to, struct bio *from)
static void bounce_end_io(struct bio *bio, mempool_t *pool)
{
struct bio *bio_orig = bio->bi_private;
struct bio_vec *bvec, *org_vec;
struct bio_vec *bvec, orig_vec;
int i;
int start = bio_orig->bi_iter.bi_idx;
struct bvec_iter orig_iter = bio_orig->bi_iter;

/*
* free up bounce indirect pages used
*/
bio_for_each_segment_all(bvec, bio, i) {
org_vec = bio_orig->bi_io_vec + i + start;

if (bvec->bv_page == org_vec->bv_page)
continue;

dec_zone_page_state(bvec->bv_page, NR_BOUNCE);
mempool_free(bvec->bv_page, pool);
orig_vec = bio_iter_iovec(bio_orig, orig_iter);
if (bvec->bv_page != orig_vec.bv_page) {
dec_zone_page_state(bvec->bv_page, NR_BOUNCE);
mempool_free(bvec->bv_page, pool);
}
bio_advance_iter(bio_orig, &orig_iter, orig_vec.bv_len);
}

bio_orig->bi_status = bio->bi_status;
Expand Down

0 comments on commit 7891f05

Please sign in to comment.