Lines Matching refs:dp
161 void (*get_page)(struct dpages *dp,
163 void (*next_page)(struct dpages *dp);
175 static void list_get_page(struct dpages *dp, in list_get_page() argument
178 unsigned o = dp->context_u; in list_get_page()
179 struct page_list *pl = (struct page_list *) dp->context_ptr; in list_get_page()
186 static void list_next_page(struct dpages *dp) in list_next_page() argument
188 struct page_list *pl = (struct page_list *) dp->context_ptr; in list_next_page()
189 dp->context_ptr = pl->next; in list_next_page()
190 dp->context_u = 0; in list_next_page()
193 static void list_dp_init(struct dpages *dp, struct page_list *pl, unsigned offset) in list_dp_init() argument
195 dp->get_page = list_get_page; in list_dp_init()
196 dp->next_page = list_next_page; in list_dp_init()
197 dp->context_u = offset; in list_dp_init()
198 dp->context_ptr = pl; in list_dp_init()
204 static void bio_get_page(struct dpages *dp, struct page **p, in bio_get_page() argument
207 struct bio_vec *bvec = dp->context_ptr; in bio_get_page()
209 *len = bvec->bv_len - dp->context_u; in bio_get_page()
210 *offset = bvec->bv_offset + dp->context_u; in bio_get_page()
213 static void bio_next_page(struct dpages *dp) in bio_next_page() argument
215 struct bio_vec *bvec = dp->context_ptr; in bio_next_page()
216 dp->context_ptr = bvec + 1; in bio_next_page()
217 dp->context_u = 0; in bio_next_page()
220 static void bio_dp_init(struct dpages *dp, struct bio *bio) in bio_dp_init() argument
222 dp->get_page = bio_get_page; in bio_dp_init()
223 dp->next_page = bio_next_page; in bio_dp_init()
224 dp->context_ptr = __bvec_iter_bvec(bio->bi_io_vec, bio->bi_iter); in bio_dp_init()
225 dp->context_u = bio->bi_iter.bi_bvec_done; in bio_dp_init()
231 static void vm_get_page(struct dpages *dp, in vm_get_page() argument
234 *p = vmalloc_to_page(dp->context_ptr); in vm_get_page()
235 *offset = dp->context_u; in vm_get_page()
236 *len = PAGE_SIZE - dp->context_u; in vm_get_page()
239 static void vm_next_page(struct dpages *dp) in vm_next_page() argument
241 dp->context_ptr += PAGE_SIZE - dp->context_u; in vm_next_page()
242 dp->context_u = 0; in vm_next_page()
245 static void vm_dp_init(struct dpages *dp, void *data) in vm_dp_init() argument
247 dp->get_page = vm_get_page; in vm_dp_init()
248 dp->next_page = vm_next_page; in vm_dp_init()
249 dp->context_u = ((unsigned long) data) & (PAGE_SIZE - 1); in vm_dp_init()
250 dp->context_ptr = data; in vm_dp_init()
256 static void km_get_page(struct dpages *dp, struct page **p, unsigned long *len, in km_get_page() argument
259 *p = virt_to_page(dp->context_ptr); in km_get_page()
260 *offset = dp->context_u; in km_get_page()
261 *len = PAGE_SIZE - dp->context_u; in km_get_page()
264 static void km_next_page(struct dpages *dp) in km_next_page() argument
266 dp->context_ptr += PAGE_SIZE - dp->context_u; in km_next_page()
267 dp->context_u = 0; in km_next_page()
270 static void km_dp_init(struct dpages *dp, void *data) in km_dp_init() argument
272 dp->get_page = km_get_page; in km_dp_init()
273 dp->next_page = km_next_page; in km_dp_init()
274 dp->context_u = ((unsigned long) data) & (PAGE_SIZE - 1); in km_dp_init()
275 dp->context_ptr = data; in km_dp_init()
282 struct dpages *dp, struct io *io) in do_region() argument
335 dp->get_page(dp, &page, &len, &offset); in do_region()
342 dp->next_page(dp); in do_region()
347 dp->get_page(dp, &page, &len, &offset); in do_region()
354 dp->next_page(dp); in do_region()
363 struct dm_io_region *where, struct dpages *dp, in dispatch_io() argument
367 struct dpages old_pages = *dp; in dispatch_io()
379 *dp = old_pages; in dispatch_io()
381 do_region(rw, i, where + i, dp, io); in dispatch_io()
405 struct dm_io_region *where, int rw, struct dpages *dp, in sync_io() argument
425 io->vma_invalidate_address = dp->vma_invalidate_address; in sync_io()
426 io->vma_invalidate_size = dp->vma_invalidate_size; in sync_io()
428 dispatch_io(rw, num_regions, where, dp, io, 1); in sync_io()
439 struct dm_io_region *where, int rw, struct dpages *dp, in async_io() argument
457 io->vma_invalidate_address = dp->vma_invalidate_address; in async_io()
458 io->vma_invalidate_size = dp->vma_invalidate_size; in async_io()
460 dispatch_io(rw, num_regions, where, dp, io, 0); in async_io()
464 static int dp_init(struct dm_io_request *io_req, struct dpages *dp, in dp_init() argument
469 dp->vma_invalidate_address = NULL; in dp_init()
470 dp->vma_invalidate_size = 0; in dp_init()
474 list_dp_init(dp, io_req->mem.ptr.pl, io_req->mem.offset); in dp_init()
478 bio_dp_init(dp, io_req->mem.ptr.bio); in dp_init()
484 dp->vma_invalidate_address = io_req->mem.ptr.vma; in dp_init()
485 dp->vma_invalidate_size = size; in dp_init()
487 vm_dp_init(dp, io_req->mem.ptr.vma); in dp_init()
491 km_dp_init(dp, io_req->mem.ptr.addr); in dp_init()
513 struct dpages dp; in dm_io() local
515 r = dp_init(io_req, &dp, (unsigned long)where->count << SECTOR_SHIFT); in dm_io()
521 io_req->bi_rw, &dp, sync_error_bits); in dm_io()
524 &dp, io_req->notify.fn, io_req->notify.context); in dm_io()