Source
156
156
flush_dcache_page(tovec.bv_page);
157
157
}
158
158
bio_advance_iter(from, &from_iter, tovec.bv_len);
159
159
}
160
160
}
161
161
162
162
static void bounce_end_io(struct bio *bio, mempool_t *pool)
163
163
{
164
164
struct bio *bio_orig = bio->bi_private;
165
165
struct bio_vec *bvec, orig_vec;
166
-
int i;
167
166
struct bvec_iter orig_iter = bio_orig->bi_iter;
168
167
struct bvec_iter_all iter_all;
169
168
170
169
/*
171
170
* free up bounce indirect pages used
172
171
*/
173
-
bio_for_each_segment_all(bvec, bio, i, iter_all) {
172
+
bio_for_each_segment_all(bvec, bio, iter_all) {
174
173
orig_vec = bio_iter_iovec(bio_orig, orig_iter);
175
174
if (bvec->bv_page != orig_vec.bv_page) {
176
175
dec_zone_page_state(bvec->bv_page, NR_BOUNCE);
177
176
mempool_free(bvec->bv_page, pool);
178
177
}
179
178
bio_advance_iter(bio_orig, &orig_iter, orig_vec.bv_len);
180
179
}
181
180
182
181
bio_orig->bi_status = bio->bi_status;
183
182
bio_endio(bio_orig);