Lines Matching refs:bp
129 struct buf *bp; in fuse_read_biobackend() local
150 for (err = 0, bp = NULL; uio->uio_resid > 0; bp = NULL) { in fuse_read_biobackend()
175 err = bread(vp, lbn, bcount, NOCRED, &bp); in fuse_read_biobackend()
182 totread, seqcount, 0, &bp); in fuse_read_biobackend()
186 NOCRED, &bp); in fuse_read_biobackend()
189 err = bread(vp, lbn, bcount, NOCRED, &bp); in fuse_read_biobackend()
193 brelse(bp); in fuse_read_biobackend()
194 bp = NULL; in fuse_read_biobackend()
207 if (on < bcount - bp->b_resid) in fuse_read_biobackend()
208 n = MIN((unsigned)(bcount - bp->b_resid - on), in fuse_read_biobackend()
211 SDT_PROBE2(fusefs, , io, read_bio_backend_feed, n, bp); in fuse_read_biobackend()
212 err = uiomove(bp->b_data + on, n, uio); in fuse_read_biobackend()
214 vfs_bio_brelse(bp, ioflag); in fuse_read_biobackend()
216 uio->uio_resid, n, bp); in fuse_read_biobackend()
217 if (bp->b_resid > 0) { in fuse_read_biobackend()
474 struct buf *bp; in fuse_write_biobackend() local
538 bp = getblk(vp, lbn, on, PCATCH, 0, 0); in fuse_write_biobackend()
539 if (bp != NULL) { in fuse_write_biobackend()
540 uint32_t save = bp->b_flags & B_CACHE; in fuse_write_biobackend()
541 allocbuf(bp, bcount); in fuse_write_biobackend()
542 bp->b_flags |= save; in fuse_write_biobackend()
545 bp = getblk(vp, lbn, bcount, PCATCH, 0, 0); in fuse_write_biobackend()
547 if (!bp) { in fuse_write_biobackend()
561 brelse(bp); in fuse_write_biobackend()
588 bp->b_flags |= B_CACHE; in fuse_write_biobackend()
589 bp->b_flags &= ~B_INVAL; in fuse_write_biobackend()
590 bp->b_ioflags &= ~BIO_ERROR; in fuse_write_biobackend()
592 if ((bp->b_flags & B_CACHE) == 0) { in fuse_write_biobackend()
593 bp->b_iocmd = BIO_READ; in fuse_write_biobackend()
594 vfs_busy_pages(bp, 0); in fuse_write_biobackend()
595 fuse_io_strategy(vp, bp); in fuse_write_biobackend()
596 if ((err = bp->b_error)) { in fuse_write_biobackend()
597 brelse(bp); in fuse_write_biobackend()
600 if (bp->b_resid > 0) { in fuse_write_biobackend()
607 brelse(bp); in fuse_write_biobackend()
616 if (bp->b_wcred == NOCRED) in fuse_write_biobackend()
617 bp->b_wcred = crhold(cred); in fuse_write_biobackend()
627 if (bp->b_dirtyend > bcount) { in fuse_write_biobackend()
629 (long)bp->b_blkno * biosize, in fuse_write_biobackend()
630 bp->b_dirtyend - bcount); in fuse_write_biobackend()
631 bp->b_dirtyend = bcount; in fuse_write_biobackend()
633 if (bp->b_dirtyoff >= bp->b_dirtyend) in fuse_write_biobackend()
634 bp->b_dirtyoff = bp->b_dirtyend = 0; in fuse_write_biobackend()
653 if (bp->b_dirtyend > 0 && in fuse_write_biobackend()
654 (on > bp->b_dirtyend || (on + n) < bp->b_dirtyoff)) { in fuse_write_biobackend()
661 SDT_PROBE2(fusefs, , io, write_biobackend_issue, 0, bp); in fuse_write_biobackend()
662 bwrite(bp); in fuse_write_biobackend()
663 if (bp->b_error == EINTR) { in fuse_write_biobackend()
669 err = uiomove((char *)bp->b_data + on, n, uio); in fuse_write_biobackend()
672 bp->b_ioflags |= BIO_ERROR; in fuse_write_biobackend()
673 bp->b_error = err; in fuse_write_biobackend()
674 brelse(bp); in fuse_write_biobackend()
683 if (bp->b_dirtyend > 0) { in fuse_write_biobackend()
684 bp->b_dirtyoff = MIN(on, bp->b_dirtyoff); in fuse_write_biobackend()
685 bp->b_dirtyend = MAX((on + n), bp->b_dirtyend); in fuse_write_biobackend()
687 bp->b_dirtyoff = on; in fuse_write_biobackend()
688 bp->b_dirtyend = on + n; in fuse_write_biobackend()
690 vfs_bio_set_valid(bp, on, n); in fuse_write_biobackend()
693 vfs_bio_set_flags(bp, ioflag); in fuse_write_biobackend()
695 bp->b_flags |= B_FUSEFS_WRITE_CACHE; in fuse_write_biobackend()
697 SDT_PROBE2(fusefs, , io, write_biobackend_issue, 2, bp); in fuse_write_biobackend()
699 bp->b_flags &= ~B_FUSEFS_WRITE_CACHE; in fuse_write_biobackend()
700 err = bwrite(bp); in fuse_write_biobackend()
704 bp->b_flags |= B_CLUSTEROK; in fuse_write_biobackend()
705 SDT_PROBE2(fusefs, , io, write_biobackend_issue, 3, bp); in fuse_write_biobackend()
706 bawrite(bp); in fuse_write_biobackend()
709 bp->b_flags |= B_CLUSTEROK; in fuse_write_biobackend()
711 4, bp); in fuse_write_biobackend()
712 cluster_write(vp, &fvdat->clusterw, bp, in fuse_write_biobackend()
716 5, bp); in fuse_write_biobackend()
717 bawrite(bp); in fuse_write_biobackend()
720 bp->b_flags |= B_CLUSTEROK; in fuse_write_biobackend()
721 SDT_PROBE2(fusefs, , io, write_biobackend_issue, 6, bp); in fuse_write_biobackend()
722 bawrite(bp); in fuse_write_biobackend()
724 bp->b_flags &= ~B_CLUSTEROK; in fuse_write_biobackend()
725 SDT_PROBE2(fusefs, , io, write_biobackend_issue, 7, bp); in fuse_write_biobackend()
726 bdwrite(bp); in fuse_write_biobackend()
737 fuse_io_strategy(struct vnode *vp, struct buf *bp) in fuse_io_strategy() argument
754 MPASS(bp->b_iocmd == BIO_READ || bp->b_iocmd == BIO_WRITE); in fuse_io_strategy()
756 fflag = bp->b_iocmd == BIO_READ ? FREAD : FWRITE; in fuse_io_strategy()
757 cred = bp->b_iocmd == BIO_READ ? bp->b_rcred : bp->b_wcred; in fuse_io_strategy()
759 if (bp->b_iocmd == BIO_READ && error == EBADF) { in fuse_io_strategy()
768 bp->b_ioflags |= BIO_ERROR; in fuse_io_strategy()
769 bp->b_error = error; in fuse_io_strategy()
770 bufdone(bp); in fuse_io_strategy()
785 bp->b_flags &= ~B_INVAL; in fuse_io_strategy()
786 bp->b_ioflags &= ~BIO_ERROR; in fuse_io_strategy()
788 KASSERT(!(bp->b_flags & B_DONE), in fuse_io_strategy()
789 ("fuse_io_strategy: bp %p already marked done", bp)); in fuse_io_strategy()
790 if (bp->b_iocmd == BIO_READ) { in fuse_io_strategy()
793 io.iov_len = uiop->uio_resid = bp->b_bcount; in fuse_io_strategy()
794 io.iov_base = bp->b_data; in fuse_io_strategy()
797 uiop->uio_offset = ((off_t)bp->b_lblkno) * biosize; in fuse_io_strategy()
805 int nread = bp->b_bcount - uiop->uio_resid; in fuse_io_strategy()
807 bzero((char *)bp->b_data + nread, left); in fuse_io_strategy()
843 bp->b_ioflags |= BIO_ERROR; in fuse_io_strategy()
844 bp->b_error = error; in fuse_io_strategy()
863 if ((off_t)bp->b_lblkno * biosize + bp->b_dirtyend > filesize) in fuse_io_strategy()
864 bp->b_dirtyend = filesize - in fuse_io_strategy()
865 (off_t)bp->b_lblkno * biosize; in fuse_io_strategy()
867 if (bp->b_dirtyend > bp->b_dirtyoff) { in fuse_io_strategy()
868 io.iov_len = uiop->uio_resid = bp->b_dirtyend in fuse_io_strategy()
869 - bp->b_dirtyoff; in fuse_io_strategy()
870 uiop->uio_offset = (off_t)bp->b_lblkno * biosize in fuse_io_strategy()
871 + bp->b_dirtyoff; in fuse_io_strategy()
872 io.iov_base = (char *)bp->b_data + bp->b_dirtyoff; in fuse_io_strategy()
875 bool pages = bp->b_flags & B_FUSEFS_WRITE_CACHE; in fuse_io_strategy()
880 bp->b_flags &= ~(B_INVAL | B_NOCACHE); in fuse_io_strategy()
881 if ((bp->b_flags & B_PAGING) == 0) { in fuse_io_strategy()
882 bdirty(bp); in fuse_io_strategy()
883 bp->b_flags &= ~B_DONE; in fuse_io_strategy()
886 (bp->b_flags & B_ASYNC) == 0) in fuse_io_strategy()
887 bp->b_flags |= B_EINTR; in fuse_io_strategy()
890 bp->b_ioflags |= BIO_ERROR; in fuse_io_strategy()
891 bp->b_flags |= B_INVAL; in fuse_io_strategy()
892 bp->b_error = error; in fuse_io_strategy()
894 bp->b_dirtyoff = bp->b_dirtyend = 0; in fuse_io_strategy()
897 bp->b_resid = 0; in fuse_io_strategy()
898 bufdone(bp); in fuse_io_strategy()
902 bp->b_resid = uiop->uio_resid; in fuse_io_strategy()
903 bufdone(bp); in fuse_io_strategy()