Lines Matching refs:uio
50 static int ulfs_post_write_update(struct vnode *, struct uio *, int,
62 struct uio *a_uio;
68 struct uio *uio;
76 uio = ap->a_uio;
80 KASSERT(uio->uio_rw == UIO_READ);
85 return BUFRD(vp, uio, ioflag, ap->a_cred);
88 return BUFRD(vp, uio, ioflag, ap->a_cred);
89 if ((u_int64_t)uio->uio_offset > fs->um_maxfilesize)
91 if (uio->uio_resid == 0)
95 if (uio->uio_offset >= ip->i_size)
100 while (uio->uio_resid > 0) {
102 genfs_directio(vp, uio, ioflag);
104 bytelen = MIN(ip->i_size - uio->uio_offset, uio->uio_resid);
107 error = ubc_uiomove(&vp->v_uobj, uio, bytelen, advice,
122 BUFRD(struct vnode *vp, struct uio *uio, int ioflag, kauth_cred_t cred)
135 KASSERT(uio->uio_rw == UIO_READ);
147 if (uio->uio_offset > fs->um_maxfilesize)
149 if (uio->uio_resid == 0)
153 if (uio->uio_offset >= ip->i_size)
156 for (error = 0, bp = NULL; uio->uio_resid > 0; bp = NULL) {
157 bytesinfile = ip->i_size - uio->uio_offset;
160 lbn = lfs_lblkno(fs, uio->uio_offset);
163 blkoffset = lfs_blkoff(fs, uio->uio_offset);
164 xfersize = MIN(MIN(fs_sb_getbsize(fs) - blkoffset, uio->uio_resid),
190 error = uiomove((char *)bp->b_data + blkoffset, xfersize, uio);
230 struct uio *a_uio;
235 struct uio *uio;
247 uio = ap->a_uio;
252 KASSERT(uio->uio_rw == UIO_WRITE);
256 uio->uio_offset = ip->i_size;
257 if ((ip->i_flags & APPEND) && uio->uio_offset != ip->i_size)
261 if (uio->uio_offset < 0 ||
262 (u_int64_t)uio->uio_offset + uio->uio_resid > fs->um_maxfilesize)
268 if (uio->uio_resid == 0)
273 origoff = uio->uio_offset;
274 resid = uio->uio_resid;
281 lfs_availwait(fs, lfs_btofsb(fs, uio->uio_resid));
284 preallocoff = round_page(lfs_blkroundup(fs, MAX(osize, uio->uio_offset)));
286 nsize = MAX(osize, uio->uio_offset + uio->uio_resid);
312 while (uio->uio_resid > 0) {
318 genfs_directio(vp, uio, ioflag);
321 oldoff = uio->uio_offset;
322 blkoffset = lfs_blkoff(fs, uio->uio_offset);
323 bytelen = MIN(fs_sb_getbsize(fs) - blkoffset, uio->uio_resid);
335 overwrite = uio->uio_offset >= preallocoff &&
336 uio->uio_offset < endallocoff;
338 lfs_blkoff(fs, uio->uio_offset) == 0 &&
339 (uio->uio_offset & PAGE_MASK) == 0) {
356 error = ulfs_balloc_range(vp, uio->uio_offset, bytelen,
362 error = GOP_ALLOC(vp, uio->uio_offset, bytelen,
374 error = ubc_uiomove(&vp->v_uobj, uio, bytelen,
401 round_page(lfs_blkroundup(fs, uio->uio_offset)),
406 error = ulfs_post_write_update(vp, uio, ioflag, cred, osize, resid,
416 BUFWR(struct vnode *vp, struct uio *uio, int ioflag, kauth_cred_t cred)
432 KASSERT(uio->uio_rw == UIO_WRITE);
439 if (uio->uio_offset < 0 ||
440 uio->uio_resid > fs->um_maxfilesize ||
441 uio->uio_offset > (fs->um_maxfilesize - uio->uio_resid))
444 if (uio->uio_resid == 0)
448 resid = uio->uio_resid;
454 lfs_availwait(fs, lfs_btofsb(fs, uio->uio_resid));
459 while (uio->uio_resid > 0) {
460 lbn = lfs_lblkno(fs, uio->uio_offset);
461 blkoffset = lfs_blkoff(fs, uio->uio_offset);
462 xfersize = MIN(fs_sb_getbsize(fs) - blkoffset, uio->uio_resid);
473 error = lfs_balloc(vp, uio->uio_offset, xfersize, cred, flags,
478 if (uio->uio_offset + xfersize > ip->i_size) {
479 ip->i_size = uio->uio_offset + xfersize;
487 error = uiomove((char *)bp->b_data + blkoffset, xfersize, uio);
510 error = ulfs_post_write_update(vp, uio, ioflag, cred, osize, resid,
517 ulfs_post_write_update(struct vnode *vp, struct uio *uio, int ioflag,
533 if (resid > uio->uio_resid && cred) {
557 uio->uio_offset -= resid - uio->uio_resid;
558 uio->uio_resid = resid;
559 } else if (resid > uio->uio_resid && (ioflag & IO_SYNC) == IO_SYNC) {