Lines Matching refs:uio

160 static int cluster_io_type(struct uio *uio, int *io_type, u_int32_t *io_length, u_int32_t min_length);
173 static int cluster_copy_ubc_data_internal(vnode_t vp, struct uio *uio, int *io_resid, int mark_dirty, int take_reference);
175 static int cluster_read_copy(vnode_t vp, struct uio *uio, u_int32_t io_req_size, off_t filesize, int flags,
177 static int cluster_read_direct(vnode_t vp, struct uio *uio, off_t filesize, int *read_type, u_int32_t *read_length,
179 static int cluster_read_contig(vnode_t vp, struct uio *uio, off_t filesize, int *read_type, u_int32_t *read_length,
182 static int cluster_write_copy(vnode_t vp, struct uio *uio, u_int32_t io_req_size, off_t oldEOF, off_t newEOF,
184 static int cluster_write_direct(vnode_t vp, struct uio *uio, off_t oldEOF, off_t newEOF,
186 static int cluster_write_contig(vnode_t vp, struct uio *uio, off_t newEOF,
189 static int cluster_align_phys_io(vnode_t vp, struct uio *uio, addr64_t usr_paddr, u_int32_t xsize, int flags, int (*)(buf_t, void *), void *callback_arg);
1969 cluster_write(vnode_t vp, struct uio *uio, off_t oldEOF, off_t newEOF, off_t headOff, off_t tailOff, int xflags)
1971 return cluster_write_ext(vp, uio, oldEOF, newEOF, headOff, tailOff, xflags, NULL, NULL);
1976 cluster_write_ext(vnode_t vp, struct uio *uio, off_t oldEOF, off_t newEOF, off_t headOff, off_t tailOff,
1998 if (uio == NULL) {
2010 * the uio request doesn't target USERSPACE
2012 * the first vector in the uio request
2014 if ( ((flags & (IO_NOCACHE | IO_NODIRECT)) == IO_NOCACHE) && UIO_SEG_IS_USER_SPACE(uio->uio_segflg) )
2015 retval = cluster_io_type(uio, &write_type, &write_length, MIN_DIRECT_WRITE_SIZE);
2023 while ((cur_resid = uio_resid(uio)) && uio->uio_offset < newEOF && retval == 0) {
2054 retval = cluster_write_copy(vp, uio, write_length, oldEOF, newEOF, headOff, tailOff, zflags, callback, callback_arg);
2066 retval = cluster_write_copy(vp, (struct uio *)0, (u_int32_t)0, (off_t)0, uio->uio_offset,
2071 retval = cluster_write_contig(vp, uio, newEOF, &write_type, &write_length, callback, callback_arg, bflag);
2073 if (retval == 0 && (flags & IO_TAILZEROFILL) && uio_resid(uio) == 0) {
2077 * treat this as an IO_HEADZEROFILL which doesn't require a uio
2080 retval = cluster_write_copy(vp, (struct uio *)0, (u_int32_t)0, (off_t)0, tailOff, uio->uio_offset,
2089 retval = cluster_write_direct(vp, uio, oldEOF, newEOF, &write_type, &write_length, flags, callback, callback_arg);
2093 retval = cluster_io_type(uio, &write_type, &write_length, MIN_DIRECT_WRITE_SIZE);
2106 if (uio->uio_offset > oldEOF)
2107 oldEOF = uio->uio_offset;
2114 cluster_write_direct(vnode_t vp, struct uio *uio, off_t oldEOF, off_t newEOF, int *write_type, u_int32_t *write_length,
2145 int issueVectorUPL = 0,useVectorUPL = (uio->uio_iovcnt > 1);
2156 (int)uio->uio_offset, *write_length, (int)newEOF, 0, 0);
2194 iov_base = uio_curriovbase(uio);
2196 offset_in_file = (u_int32_t)uio->uio_offset & PAGE_MASK;
2215 while (io_req_size >= PAGE_SIZE && uio->uio_offset < newEOF && retval == 0) {
2249 iov_base = uio_curriovbase(uio);
2371 * uio->uio_offset is page aligned within the file
2374 ubc_range_op(vp, uio->uio_offset, uio->uio_offset + io_size, UPL_ROP_DUMP, NULL);
2399 (int)upl_offset, (int)uio->uio_offset, io_size, io_flag, 0);
2402 retval = cluster_io(vp, upl, upl_offset, uio->uio_offset,
2408 v_upl_uio_offset = uio->uio_offset;
2425 * update the uio structure to
2428 uio_update(uio, (user_size_t)io_size);
2439 if (uio->uio_offset > oldEOF)
2440 oldEOF = uio->uio_offset;
2445 (int)upl_offset, (int)uio->uio_offset, io_req_size, retval, 0);
2451 retval = cluster_io_type(uio, write_type, write_length, MIN_DIRECT_WRITE_SIZE);
2456 (int)uio->uio_offset, *write_length, (int)newEOF, 0, 0);
2492 if (uio->uio_offset > oldEOF)
2493 oldEOF = uio->uio_offset;
2495 retval = cluster_write_copy(vp, uio, io_req_size, oldEOF, newEOF, (off_t)0, (off_t)0, flags, callback, callback_arg);
2500 (int)uio->uio_offset, io_req_size, retval, 4, 0);
2507 cluster_write_contig(vnode_t vp, struct uio *uio, off_t newEOF, int *write_type, u_int32_t *write_length,
2551 iov_base = uio_curriovbase(uio);
2588 while (((uio->uio_offset & (devblocksize - 1)) || io_size < devblocksize) && io_size) {
2591 head_size = devblocksize - (u_int32_t)(uio->uio_offset & (devblocksize - 1));
2596 error = cluster_align_phys_io(vp, uio, src_paddr, head_size, 0, callback, callback_arg);
2651 error = cluster_io(vp, upl[cur_upl], upl_offset, uio->uio_offset,
2657 * update the uio structure
2659 uio_update(uio, (user_size_t)xsize);
2668 error = cluster_io_type(uio, write_type, write_length, 0);
2691 error = cluster_align_phys_io(vp, uio, src_paddr, tail_size, 0, callback, callback_arg);
2741 cluster_write_copy(vnode_t vp, struct uio *uio, u_int32_t io_req_size, off_t oldEOF, off_t newEOF, off_t headOff,
2773 if (uio) {
2775 (int)uio->uio_offset, io_req_size, (int)oldEOF, (int)newEOF, 0);
2805 * uio structure will not be provided
2807 if (uio) {
2808 if (headOff < uio->uio_offset) {
2809 zero_cnt = uio->uio_offset - headOff;
2817 if (uio && uio->uio_offset > oldEOF) {
2818 zero_off = uio->uio_offset & ~PAGE_MASK_64;
2821 zero_cnt = uio->uio_offset - zero_off;
2828 if (uio) {
2829 zero_off1 = uio->uio_offset + io_req_size;
2835 if (uio && newEOF > oldEOF) {
2836 zero_off1 = uio->uio_offset + io_req_size;
2845 if (zero_cnt == 0 && uio == (struct uio *) 0) {
2850 if (uio) {
2851 write_off = uio->uio_offset;
2852 write_cnt = uio_resid(uio);
2868 start_offset = (int)(uio->uio_offset & PAGE_MASK_64);
2869 upl_f_offset = uio->uio_offset - start_offset;
2882 if (uio && ((flags & (IO_SYNC | IO_HEADZEROFILL | IO_TAILZEROFILL)) == 0)) {
2891 retval = cluster_copy_ubc_data_internal(vp, uio, &xfer_resid, 1, 1);
2898 start_offset = (int)(uio->uio_offset & PAGE_MASK_64);
2899 upl_f_offset = uio->uio_offset - start_offset;
2950 UPL_SET_LITE | (( uio!=NULL && (uio->uio_flags & UIO_FLAGS_IS_COMPRESSED_FILE)) ? 0 : UPL_WILL_MODIFY));
3049 retval = cluster_copy_upl_data(uio, upl, io_offset, (int *)&io_requested);
3383 cluster_read(vnode_t vp, struct uio *uio, off_t filesize, int xflags)
3385 return cluster_read_ext(vp, uio, filesize, xflags, NULL, NULL);
3390 cluster_read_ext(vnode_t vp, struct uio *uio, off_t filesize, int xflags, int (*callback)(buf_t, void *), void *callback_arg)
3421 * the uio request doesn't target USERSPACE
3427 * the first vector in the uio request
3429 if (((flags & IO_NOCACHE) || (flags & IO_ENCRYPTED)) && UIO_SEG_IS_USER_SPACE(uio->uio_segflg)) {
3430 retval = cluster_io_type(uio, &read_type, &read_length, 0);
3433 while ((cur_resid = uio_resid(uio)) && uio->uio_offset < filesize && retval == 0) {
3448 retval = cluster_read_copy(vp, uio, io_size, filesize, flags, callback, callback_arg);
3452 retval = cluster_read_direct(vp, uio, filesize, &read_type, &read_length, flags, callback, callback_arg);
3456 retval = cluster_read_contig(vp, uio, filesize, &read_type, &read_length, callback, callback_arg, flags);
3460 retval = cluster_io_type(uio, &read_type, &read_length, 0);
3485 cluster_read_copy(vnode_t vp, struct uio *uio, u_int32_t io_req_size, off_t filesize, int flags, int (*callback)(buf_t, void *), void *callback_arg)
3520 (int)uio->uio_offset, io_req_size, (int)filesize, flags, 0);
3543 last_request_offset = uio->uio_offset + io_req_size;
3548 if ((flags & (IO_RAOFF|IO_NOCACHE)) || ((last_request_offset & ~PAGE_MASK_64) == (uio->uio_offset & ~PAGE_MASK_64))) {
3566 extent.b_addr = uio->uio_offset / PAGE_SIZE_64;
3580 if (last_ioread_offset < uio->uio_offset)
3587 while (io_req_size && uio->uio_offset < filesize && retval == 0) {
3589 max_size = filesize - uio->uio_offset;
3610 if ((last_ioread_offset - uio->uio_offset) <= max_rd_size && prefetch_enabled) {
3641 retval = cluster_copy_ubc_data_internal(vp, uio, (int *)&io_resid, 0, take_reference);
3676 * may have advanced uio->uio_offset
3678 max_size = filesize - uio->uio_offset;
3688 if ( !cluster_io_present_in_BC(vp, uio->uio_offset)) {
3712 start_offset = (int)(uio->uio_offset & PAGE_MASK_64);
3713 upl_f_offset = uio->uio_offset - (off_t)start_offset;
3840 if ((uio->uio_offset + val_size) > last_ioread_offset)
3841 last_ioread_offset = uio->uio_offset + val_size;
3845 if ((last_ioread_offset - (uio->uio_offset + val_size)) <= upl_size) {
3864 } else if ((uio->uio_offset + val_size) == last_request_offset) {
3890 retval = cluster_copy_upl_data(uio, upl, start_offset, (int *)&io_requested);
3997 (int)uio->uio_offset, io_req_size, rap->cl_lastr, retval, 0);
4002 (int)uio->uio_offset, io_req_size, 0, retval, 0);
4010 cluster_read_direct(vnode_t vp, struct uio *uio, off_t filesize, int *read_type, u_int32_t *read_length,
4046 int issueVectorUPL = 0,useVectorUPL = (uio->uio_iovcnt > 1);
4052 (int)uio->uio_offset, (int)filesize, *read_type, *read_length, 0);
4103 iov_base = uio_curriovbase(uio);
4105 max_io_size = filesize - uio->uio_offset;
4110 offset_in_file = (u_int32_t)uio->uio_offset & (devblocksize - 1);
4173 retval = cluster_copy_ubc_data_internal(vp, uio, (int *)&io_size, 0, 0);
4214 * see if there's another uio vector to
4286 ubc_range_op(vp, uio->uio_offset, uio->uio_offset + xsize, UPL_ROP_ABSENT, (int *)&io_size);
4299 if ( !cluster_io_present_in_BC(vp, uio->uio_offset)) {
4317 iov_base = uio_curriovbase(uio);
4424 upl, (int)upl_offset, (int)uio->uio_offset, io_size, 0);
4433 retval = cluster_io(vp, upl, upl_offset, uio->uio_offset, io_size, io_flag, (buf_t)NULL, &iostate, callback, callback_arg);
4439 v_upl_uio_offset = uio->uio_offset;
4455 * update the uio structure
4458 uio_update(uio, (user_size_t)max_io_size);
4461 uio_update(uio, (user_size_t)io_size);
4477 upl, (int)uio->uio_offset, io_req_size, retval, 0);
4481 if (retval == 0 && iostate.io_error == 0 && io_req_size == 0 && uio->uio_offset < filesize) {
4483 retval = cluster_io_type(uio, read_type, read_length, 0);
4488 (int)uio->uio_offset, (int)filesize, *read_type, *read_length, 0);
4520 retval = cluster_read_copy(vp, uio, io_req_size, filesize, flags, callback, callback_arg);
4525 (int)uio->uio_offset, (int)uio_resid(uio), io_req_size, retval, 0);
4532 cluster_read_contig(vnode_t vp, struct uio *uio, off_t filesize, int *read_type, u_int32_t *read_length,
4586 max_size = filesize - uio->uio_offset;
4591 iov_base = uio_curriovbase(uio);
4631 while (((uio->uio_offset & (devblocksize - 1)) || io_size < devblocksize) && io_size) {
4634 head_size = devblocksize - (u_int32_t)(uio->uio_offset & (devblocksize - 1));
4639 error = cluster_align_phys_io(vp, uio, dst_paddr, head_size, CL_READ, callback, callback_arg);
4692 error = cluster_io(vp, upl[cur_upl], upl_offset, uio->uio_offset, xsize,
4697 * update the uio structure
4700 uio_update(uio, (user_size_t)xsize);
4707 if (error == 0 && iostate.io_error == 0 && tail_size == 0 && num_upl < MAX_VECTS && uio->uio_offset < filesize) {
4709 error = cluster_io_type(uio, read_type, read_length, 0);
4732 error = cluster_align_phys_io(vp, uio, dst_paddr, tail_size, CL_READ, callback, callback_arg);
4746 cluster_io_type(struct uio *uio, int *io_type, u_int32_t *io_length, u_int32_t min_length)
4758 uio_update(uio, (user_size_t)0);
4760 iov_len = uio_curriovlen(uio);
4762 KERNEL_DEBUG((FSDBG_CODE(DBG_FSRW, 94)) | DBG_FUNC_START, uio, (int)iov_len, 0, 0, 0);
4765 iov_base = uio_curriovbase(uio);
4799 * nothing left to do for this uio
5598 cluster_align_phys_io(vnode_t vp, struct uio *uio, addr64_t usr_paddr, u_int32_t xsize, int flags, int (*callback)(buf_t, void *), void *callback_arg)
5636 uio->uio_offset & ~PAGE_MASK_64,
5649 error = cluster_io(vp, upl, 0, uio->uio_offset & ~PAGE_MASK_64, PAGE_SIZE,
5658 ubc_paddr = ((addr64_t)upl_phys_page(pl, 0) << 12) + (addr64_t)(uio->uio_offset & PAGE_MASK_64);
5677 error = cluster_io(vp, upl, 0, uio->uio_offset & ~PAGE_MASK_64, PAGE_SIZE,
5681 uio_update(uio, (user_size_t)xsize);
5696 cluster_copy_upl_data(struct uio *uio, upl_t upl, int upl_offset, int *io_resid)
5709 (int)uio->uio_offset, upl_offset, xsize, 0, 0);
5711 segflg = uio->uio_segflg;
5717 uio->uio_segflg = UIO_PHYS_USERSPACE32;
5722 uio->uio_segflg = UIO_PHYS_USERSPACE;
5727 uio->uio_segflg = UIO_PHYS_USERSPACE64;
5731 uio->uio_segflg = UIO_PHYS_SYSSPACE;
5746 retval = uiomove64(paddr, csize, uio);
5755 uio->uio_segflg = segflg;
5758 (int)uio->uio_offset, xsize, retval, segflg, 0);
5765 cluster_copy_ubc_data(vnode_t vp, struct uio *uio, int *io_resid, int mark_dirty)
5768 return (cluster_copy_ubc_data_internal(vp, uio, io_resid, mark_dirty, 1));
5773 cluster_copy_ubc_data_internal(vnode_t vp, struct uio *uio, int *io_resid, int mark_dirty, int take_reference)
5785 (int)uio->uio_offset, io_size, mark_dirty, take_reference, 0);
5791 (int)uio->uio_offset, io_size, retval, 3, 0);
5795 segflg = uio->uio_segflg;
5801 uio->uio_segflg = UIO_PHYS_USERSPACE32;
5806 uio->uio_segflg = UIO_PHYS_USERSPACE64;
5811 uio->uio_segflg = UIO_PHYS_USERSPACE;
5815 uio->uio_segflg = UIO_PHYS_SYSSPACE;
5820 start_offset = (int)(uio->uio_offset & PAGE_MASK_64);
5821 xsize = uio_resid(uio);
5823 retval = memory_object_control_uiomove(control, uio->uio_offset - start_offset, uio,
5825 xsize -= uio_resid(uio);
5828 uio->uio_segflg = segflg;
5832 (int)uio->uio_offset, io_size, retval, 0x80000000 | segflg, 0);