Lines Matching refs:bp
70 struct buf *bp = NULL, *rabp; in nfs_bioread() local
166 bp = nfs_getcacheblk(vp, bn, biosize, p); in nfs_bioread()
167 if (!bp) in nfs_bioread()
170 if ((bp->b_flags & (B_DONE | B_DELWRI)) == 0) { in nfs_bioread()
171 bp->b_flags |= B_READ; in nfs_bioread()
173 error = nfs_doio(bp, p); in nfs_bioread()
175 brelse(bp); in nfs_bioread()
184 if (on < bp->b_validoff || (on + n) > bp->b_validend) { in nfs_bioread()
185 bp->b_flags |= B_INVAFTERWRITE; in nfs_bioread()
186 if (bp->b_dirtyend > 0) { in nfs_bioread()
187 if ((bp->b_flags & B_DELWRI) == 0) in nfs_bioread()
189 if (VOP_BWRITE(bp) == EINTR) in nfs_bioread()
192 brelse(bp); in nfs_bioread()
196 diff = (on >= bp->b_validend) ? 0 : (bp->b_validend - on); in nfs_bioread()
202 bp = nfs_getcacheblk(vp, 0, NFS_MAXPATHLEN, p); in nfs_bioread()
203 if (!bp) in nfs_bioread()
205 if ((bp->b_flags & B_DONE) == 0) { in nfs_bioread()
206 bp->b_flags |= B_READ; in nfs_bioread()
207 error = nfs_doio(bp, p); in nfs_bioread()
209 brelse(bp); in nfs_bioread()
213 n = ulmin(uio->uio_resid, NFS_MAXPATHLEN - bp->b_resid); in nfs_bioread()
224 baddr = bp->b_data; in nfs_bioread()
232 brelse(bp); in nfs_bioread()
251 struct buf *bp; in nfs_write() local
323 bp = nfs_getcacheblk(vp, bn, biosize, p); in nfs_write()
324 if (!bp) { in nfs_write()
341 if (bp->b_dirtyend > 0 && in nfs_write()
342 (on > bp->b_dirtyend || (on + n) < bp->b_dirtyoff)) { in nfs_write()
343 bp->b_proc = p; in nfs_write()
344 if (VOP_BWRITE(bp) == EINTR) { in nfs_write()
351 error = uiomove((char *)bp->b_data + on, n, uio); in nfs_write()
353 bp->b_flags |= B_ERROR; in nfs_write()
354 brelse(bp); in nfs_write()
357 if (bp->b_dirtyend > 0) { in nfs_write()
358 bp->b_dirtyoff = min(on, bp->b_dirtyoff); in nfs_write()
359 bp->b_dirtyend = max((on + n), bp->b_dirtyend); in nfs_write()
361 bp->b_dirtyoff = on; in nfs_write()
362 bp->b_dirtyend = on + n; in nfs_write()
364 if (bp->b_validend == 0 || bp->b_validend < bp->b_dirtyoff || in nfs_write()
365 bp->b_validoff > bp->b_dirtyend) { in nfs_write()
366 bp->b_validoff = bp->b_dirtyoff; in nfs_write()
367 bp->b_validend = bp->b_dirtyend; in nfs_write()
369 bp->b_validoff = min(bp->b_validoff, bp->b_dirtyoff); in nfs_write()
370 bp->b_validend = max(bp->b_validend, bp->b_dirtyend); in nfs_write()
382 if (bp->b_flags & B_NEEDCOMMIT) { in nfs_write()
383 bp->b_flags &= ~B_NEEDCOMMIT; in nfs_write()
384 nfs_del_tobecommitted_range(vp, bp); in nfs_write()
386 nfs_del_committed_range(vp, bp); in nfs_write()
389 bp->b_flags &= ~B_NEEDCOMMIT; in nfs_write()
392 bp->b_proc = p; in nfs_write()
393 error = VOP_BWRITE(bp); in nfs_write()
397 bp->b_proc = NULL; in nfs_write()
398 bp->b_flags |= B_ASYNC; in nfs_write()
399 (void)nfs_writebp(bp, 0); in nfs_write()
401 bdwrite(bp); in nfs_write()
427 struct buf *bp; in nfs_getcacheblk() local
431 bp = getblk(vp, bn, size, PCATCH, INFSLP); in nfs_getcacheblk()
432 while (bp == NULL) { in nfs_getcacheblk()
435 bp = getblk(vp, bn, size, 0, SEC_TO_NSEC(2)); in nfs_getcacheblk()
438 bp = getblk(vp, bn, size, 0, INFSLP); in nfs_getcacheblk()
439 return (bp); in nfs_getcacheblk()
499 nfs_asyncio(struct buf *bp, int readahead) in nfs_asyncio() argument
510 if ((bp->b_flags & B_READ) == 0) { in nfs_asyncio()
511 bp->b_flags |= B_WRITEINPROG; in nfs_asyncio()
514 TAILQ_INSERT_TAIL(&nfs_bufq, bp, b_freelist); in nfs_asyncio()
530 nfs_doio(struct buf *bp, struct proc *p) in nfs_doio() argument
540 vp = bp->b_vp; in nfs_doio()
552 if (bp->b_flags & B_PHYS) { in nfs_doio()
553 io.iov_len = uiop->uio_resid = bp->b_bcount; in nfs_doio()
555 io.iov_base = bp->b_data; in nfs_doio()
556 uiop->uio_offset = ((off_t)bp->b_blkno) << DEV_BSHIFT; in nfs_doio()
557 if (bp->b_flags & B_READ) { in nfs_doio()
568 bp->b_flags |= B_ERROR; in nfs_doio()
569 bp->b_error = error; in nfs_doio()
571 } else if (bp->b_flags & B_READ) { in nfs_doio()
572 io.iov_len = uiop->uio_resid = bp->b_bcount; in nfs_doio()
573 io.iov_base = bp->b_data; in nfs_doio()
577 uiop->uio_offset = ((off_t)bp->b_blkno) << DEV_BSHIFT; in nfs_doio()
583 bp->b_validoff = 0; in nfs_doio()
591 diff = bp->b_bcount - uiop->uio_resid; in nfs_doio()
592 len = np->n_size - ((((off_t)bp->b_blkno) << DEV_BSHIFT) in nfs_doio()
596 memset((char *)bp->b_data + diff, 0, len); in nfs_doio()
597 bp->b_validend = diff + len; in nfs_doio()
599 bp->b_validend = diff; in nfs_doio()
601 bp->b_validend = bp->b_bcount; in nfs_doio()
621 bp->b_flags |= B_ERROR; in nfs_doio()
622 bp->b_error = error; in nfs_doio()
625 io.iov_len = uiop->uio_resid = bp->b_dirtyend in nfs_doio()
626 - bp->b_dirtyoff; in nfs_doio()
627 uiop->uio_offset = ((off_t)bp->b_blkno) * DEV_BSIZE in nfs_doio()
628 + bp->b_dirtyoff; in nfs_doio()
629 io.iov_base = (char *)bp->b_data + bp->b_dirtyoff; in nfs_doio()
634 if ((bp->b_flags & (B_ASYNC | B_NEEDCOMMIT | B_NOCACHE)) == B_ASYNC) in nfs_doio()
638 bp->b_flags |= B_WRITEINPROG; in nfs_doio()
643 bp->b_flags |= B_NEEDCOMMIT; in nfs_doio()
644 nfs_add_tobecommitted_range(vp, bp); in nfs_doio()
646 bp->b_flags &= ~B_NEEDCOMMIT; in nfs_doio()
647 nfs_del_committed_range(vp, bp); in nfs_doio()
651 bp->b_flags &= ~B_WRITEINPROG; in nfs_doio()
665 if (error == EINTR || (!error && (bp->b_flags & B_NEEDCOMMIT))) { in nfs_doio()
667 buf_dirty(bp); in nfs_doio()
670 if (!(bp->b_flags & B_ASYNC) && error) in nfs_doio()
671 bp->b_flags |= B_EINTR; in nfs_doio()
674 bp->b_flags |= B_ERROR; in nfs_doio()
675 bp->b_error = np->n_error = error; in nfs_doio()
678 bp->b_dirtyoff = bp->b_dirtyend = 0; in nfs_doio()
681 bp->b_resid = uiop->uio_resid; in nfs_doio()
685 biodone(bp); in nfs_doio()