/* * Simple bounce buffer support for highmem pages. Depending on the * queue gfp mask set, *to may or may not be a highmem page. kmap it * always, it will do the Right Thing */ static void copy_to_high_bio_irq(struct bio *to, struct bio *from) { unsigned char *vfrom; struct bio_vec tovec, *fromvec = from->bi_io_vec; struct bvec_iter iter; bio_for_each_segment(tovec, to, iter) { if (tovec.bv_page != fromvec->bv_page) { /* * fromvec->bv_offset and fromvec->bv_len might have * been modified by the block layer, so use the original * copy, bounce_copy_vec already uses tovec->bv_len */ vfrom = page_address(fromvec->bv_page) + tovec.bv_offset; bounce_copy_vec(&tovec, vfrom); flush_dcache_page(tovec.bv_page); } fromvec++; } }
/* * Simple bounce buffer support for highmem pages. Depending on the * queue gfp mask set, *to may or may not be a highmem page. kmap it * always, it will do the Right Thing */ static void copy_to_high_bio_irq(struct bio *to, struct bio *from) { unsigned char *vfrom; struct bio_vec *tovec, *fromvec; int i; bio_for_each_segment(tovec, to, i) { fromvec = from->bi_io_vec + i; /* * not bounced */ if (tovec->bv_page == fromvec->bv_page) continue; /* * fromvec->bv_offset and fromvec->bv_len might have been * modified by the block layer, so use the original copy, * bounce_copy_vec already uses tovec->bv_len */ vfrom = page_address(fromvec->bv_page) + tovec->bv_offset; bounce_copy_vec(tovec, vfrom); }