static int dp_init(struct dm_io_request *io_req, struct dpages *dp) { /* Set up dpages based on memory type */ switch (io_req->mem.type) { case DM_IO_PAGE_LIST: list_dp_init(dp, io_req->mem.ptr.pl, io_req->mem.offset); break; case DM_IO_BVEC: bvec_dp_init(dp, io_req->mem.ptr.bvec); break; case DM_IO_VMA: vm_dp_init(dp, io_req->mem.ptr.vma); break; case DM_IO_KMEM: km_dp_init(dp, io_req->mem.ptr.addr); break; default: return -EINVAL; } return 0; }
static int dp_init(struct dm_io_request *io_req, struct dpages *dp, unsigned long size) { dp->vma_invalidate_address = NULL; dp->vma_invalidate_size = 0; switch (io_req->mem.type) { case DM_IO_PAGE_LIST: list_dp_init(dp, io_req->mem.ptr.pl, io_req->mem.offset); break; case DM_IO_BVEC: bvec_dp_init(dp, io_req->mem.ptr.bvec); break; case DM_IO_VMA: flush_kernel_vmap_range(io_req->mem.ptr.vma, size); if ((io_req->bi_rw & RW_MASK) == READ) { dp->vma_invalidate_address = io_req->mem.ptr.vma; dp->vma_invalidate_size = size; } vm_dp_init(dp, io_req->mem.ptr.vma); break; case DM_IO_KMEM: km_dp_init(dp, io_req->mem.ptr.addr); break; default: return -EINVAL; } return 0; }