Lines Matching refs:bp

177 	struct buf *bp;
222 bp = getblk(vp, lbn, bcount, PCATCH, 0, 0);
224 if (!bp)
232 if ((bp->b_flags & B_CACHE) == 0) {
233 bp->b_iocmd = BIO_READ;
234 vfs_busy_pages(bp, 0);
235 err = fuse_io_strategy(vp, bp);
237 brelse(bp);
242 * on is the offset into the current bp. Figure out how many
243 * bytes we can copy out of the bp. Note that bcount is
255 n, bp->b_data + on, n + (int)bp->b_resid);
256 err = uiomove(bp->b_data + on, n, uio);
258 brelse(bp);
375 struct buf *bp;
429 bp = getblk(vp, lbn, bcount, PCATCH, 0, 0);
431 if (bp != NULL) {
437 brelse(bp);
440 save = bp->b_flags & B_CACHE;
442 allocbuf(bp, bcount);
443 bp->b_flags |= save;
459 bp = getblk(vp, lbn, bcount, PCATCH, 0, 0);
460 if (bp && uio->uio_offset + n > fvdat->filesize) {
464 brelse(bp);
470 if (!bp) {
494 bp->b_flags |= B_CACHE;
495 bp->b_flags &= ~B_INVAL;
496 bp->b_ioflags &= ~BIO_ERROR;
498 if ((bp->b_flags & B_CACHE) == 0) {
499 bp->b_iocmd = BIO_READ;
500 vfs_busy_pages(bp, 0);
501 fuse_io_strategy(vp, bp);
502 if ((err = bp->b_error)) {
503 brelse(bp);
507 if (bp->b_wcred == NOCRED)
508 bp->b_wcred = crhold(cred);
519 if (bp->b_dirtyend > bcount) {
521 (long)bp->b_blkno * biosize,
522 bp->b_dirtyend - bcount);
523 bp->b_dirtyend = bcount;
525 if (bp->b_dirtyoff >= bp->b_dirtyend)
526 bp->b_dirtyoff = bp->b_dirtyend = 0;
545 if (bp->b_dirtyend > 0 &&
546 (on > bp->b_dirtyend || (on + n) < bp->b_dirtyoff)) {
553 bwrite(bp);
554 if (bp->b_error == EINTR) {
560 err = uiomove((char *)bp->b_data + on, n, uio);
568 bp->b_flags &= ~(B_NEEDCOMMIT | B_CLUSTEROK);
571 bp->b_ioflags |= BIO_ERROR;
572 bp->b_error = err;
573 brelse(bp);
581 if (bp->b_dirtyend > 0) {
582 bp->b_dirtyoff = MIN(on, bp->b_dirtyoff);
583 bp->b_dirtyend = MAX((on + n), bp->b_dirtyend);
585 bp->b_dirtyoff = on;
586 bp->b_dirtyend = on + n;
588 vfs_bio_set_valid(bp, on, n);
590 err = bwrite(bp);
602 fuse_io_strategy(struct vnode *vp, struct buf *bp)
615 MPASS(bp->b_iocmd == BIO_READ || bp->b_iocmd == BIO_WRITE);
617 (uintmax_t)VTOI(vp), (intmax_t)(((off_t)bp->b_blkno) * biosize),
618 bp->b_bcount);
621 (bp->b_iocmd == BIO_READ) ? FUFH_RDONLY : FUFH_WRONLY, &fufh);
624 bp->b_ioflags |= BIO_ERROR;
625 bp->b_error = error;
628 cred = bp->b_iocmd == BIO_READ ? bp->b_rcred : bp->b_wcred;
641 bp->b_flags &= ~B_INVAL;
642 bp->b_ioflags &= ~BIO_ERROR;
644 KASSERT(!(bp->b_flags & B_DONE),
645 ("fuse_io_strategy: bp %p already marked done", bp));
646 if (bp->b_iocmd == BIO_READ) {
647 io.iov_len = uiop->uio_resid = bp->b_bcount;
648 io.iov_base = bp->b_data;
651 uiop->uio_offset = ((off_t)bp->b_blkno) * biosize;
666 int nread = bp->b_bcount - uiop->uio_resid;
678 bzero((char *)bp->b_data + nread, left);
682 bp->b_ioflags |= BIO_ERROR;
683 bp->b_error = error;
689 if (bp->b_flags & B_NEEDCOMMIT) {
695 if ((off_t)bp->b_blkno * biosize + bp->b_dirtyend >
697 bp->b_dirtyend = fvdat->filesize -
698 (off_t)bp->b_blkno * biosize;
700 if (bp->b_dirtyend > bp->b_dirtyoff) {
701 io.iov_len = uiop->uio_resid = bp->b_dirtyend
702 - bp->b_dirtyoff;
703 uiop->uio_offset = (off_t)bp->b_blkno * biosize
704 + bp->b_dirtyoff;
705 io.iov_base = (char *)bp->b_data + bp->b_dirtyoff;
711 || (!error && (bp->b_flags & B_NEEDCOMMIT))) {
713 bp->b_flags &= ~(B_INVAL | B_NOCACHE);
714 if ((bp->b_flags & B_PAGING) == 0) {
715 bdirty(bp);
716 bp->b_flags &= ~B_DONE;
719 (bp->b_flags & B_ASYNC) == 0)
720 bp->b_flags |= B_EINTR;
723 bp->b_ioflags |= BIO_ERROR;
724 bp->b_flags |= B_INVAL;
725 bp->b_error = error;
727 bp->b_dirtyoff = bp->b_dirtyend = 0;
730 bp->b_resid = 0;
731 bufdone(bp);
735 bp->b_resid = uiop->uio_resid;
736 bufdone(bp);