Lines Matching defs:uio
53 zfs_freeuio(struct uio *uio)
56 freeuio(uio);
58 free(uio, M_IOV);
63 zfs_uiomove(void *cp, size_t n, zfs_uio_rw_t dir, zfs_uio_t *uio)
65 ASSERT3U(zfs_uio_rw(uio), ==, dir);
66 return (uiomove(cp, (int)n, GET_UIO_STRUCT(uio)));
70 * same as zfs_uiomove() but doesn't modify uio structure.
74 zfs_uiocopy(void *p, size_t n, zfs_uio_rw_t rw, zfs_uio_t *uio, size_t *cbytes)
77 struct uio small_uio_clone;
78 struct uio *uio_clone;
81 ASSERT3U(zfs_uio_rw(uio), ==, rw);
82 if (zfs_uio_iovcnt(uio) == 1) {
83 small_uio_clone = *(GET_UIO_STRUCT(uio));
84 small_iovec[0] = *(GET_UIO_STRUCT(uio)->uio_iov);
88 uio_clone = cloneuio(GET_UIO_STRUCT(uio));
92 *cbytes = zfs_uio_resid(uio) - uio_clone->uio_resid;
102 zfs_uioskip(zfs_uio_t *uio, size_t n)
107 if (n > zfs_uio_resid(uio))
110 segflg = zfs_uio_segflg(uio);
111 zfs_uio_segflg(uio) = UIO_NOCOPY;
112 zfs_uiomove(NULL, n, zfs_uio_rw(uio), uio);
113 zfs_uio_segflg(uio) = segflg;
117 zfs_uio_fault_move(void *p, size_t n, zfs_uio_rw_t dir, zfs_uio_t *uio)
119 ASSERT3U(zfs_uio_rw(uio), ==, dir);
120 return (vn_io_fault_uiomove(p, n, GET_UIO_STRUCT(uio)));
124 * Check if the uio is page-aligned in memory.
127 zfs_uio_page_aligned(zfs_uio_t *uio)
129 const struct iovec *iov = GET_UIO_STRUCT(uio)->uio_iov;
131 for (int i = zfs_uio_iovcnt(uio); i > 0; iov++, i--) {
143 zfs_uio_set_pages_to_stable(zfs_uio_t *uio)
145 ASSERT3P(uio->uio_dio.pages, !=, NULL);
146 ASSERT3S(uio->uio_dio.npages, >, 0);
148 for (int i = 0; i < uio->uio_dio.npages; i++) {
149 vm_page_t page = uio->uio_dio.pages[i];
159 zfs_uio_release_stable_pages(zfs_uio_t *uio)
161 ASSERT3P(uio->uio_dio.pages, !=, NULL);
162 for (int i = 0; i < uio->uio_dio.npages; i++) {
163 vm_page_t page = uio->uio_dio.pages[i];
193 zfs_uio_free_dio_pages(zfs_uio_t *uio, zfs_uio_rw_t rw)
195 ASSERT(uio->uio_extflg & UIO_DIRECT);
196 ASSERT3P(uio->uio_dio.pages, !=, NULL);
197 ASSERT(zfs_uio_rw(uio) == rw);
200 zfs_uio_release_stable_pages(uio);
202 vm_page_unhold_pages(&uio->uio_dio.pages[0],
203 uio->uio_dio.npages);
205 kmem_free(uio->uio_dio.pages,
206 uio->uio_dio.npages * sizeof (vm_page_t));
229 zfs_uio_iov_step(struct iovec v, zfs_uio_t *uio, int *numpages)
237 zfs_uio_rw(uio), &uio->uio_dio.pages[uio->uio_dio.npages]);
248 zfs_uio_get_dio_pages_impl(zfs_uio_t *uio)
250 const struct iovec *iovp = GET_UIO_STRUCT(uio)->uio_iov;
251 size_t len = zfs_uio_resid(uio);
253 for (int i = 0; i < zfs_uio_iovcnt(uio); i++) {
263 int error = zfs_uio_iov_step(iov, uio, &numpages);
268 uio->uio_dio.npages += numpages;
285 zfs_uio_get_dio_pages_alloc(zfs_uio_t *uio, zfs_uio_rw_t rw)
288 int npages = DIV_ROUND_UP(zfs_uio_resid(uio), PAGE_SIZE);
291 ASSERT(zfs_uio_rw(uio) == rw);
293 uio->uio_dio.pages = kmem_alloc(size, KM_SLEEP);
295 error = zfs_uio_get_dio_pages_impl(uio);
298 vm_page_unhold_pages(&uio->uio_dio.pages[0],
299 uio->uio_dio.npages);
300 kmem_free(uio->uio_dio.pages, size);
304 ASSERT3S(uio->uio_dio.npages, >, 0);
312 if (zfs_uio_rw(uio) == UIO_WRITE)
313 zfs_uio_set_pages_to_stable(uio);
315 uio->uio_extflg |= UIO_DIRECT;