Lines Matching refs:bp
348 checkfreelist(buf_t *bp, struct bqueue *dp, int ison) in checkfreelist() argument
356 if (b == bp) in checkfreelist()
369 binsheadfree(buf_t *bp, struct bqueue *dp) in binsheadfree() argument
373 KASSERT(bp->b_freelistindex == -1); in binsheadfree()
374 TAILQ_INSERT_HEAD(&dp->bq_queue, bp, b_freelist); in binsheadfree()
375 dp->bq_bytes += bp->b_bufsize; in binsheadfree()
376 bp->b_freelistindex = dp - bufqueues; in binsheadfree()
380 binstailfree(buf_t *bp, struct bqueue *dp) in binstailfree() argument
384 KASSERTMSG(bp->b_freelistindex == -1, "double free of buffer? " in binstailfree()
385 "bp=%p, b_freelistindex=%d\n", bp, bp->b_freelistindex); in binstailfree()
386 TAILQ_INSERT_TAIL(&dp->bq_queue, bp, b_freelist); in binstailfree()
387 dp->bq_bytes += bp->b_bufsize; in binstailfree()
388 bp->b_freelistindex = dp - bufqueues; in binstailfree()
392 bremfree(buf_t *bp) in bremfree() argument
395 int bqidx = bp->b_freelistindex; in bremfree()
401 KDASSERT(checkfreelist(bp, dp, 1)); in bremfree()
402 KASSERT(dp->bq_bytes >= bp->b_bufsize); in bremfree()
403 TAILQ_REMOVE(&dp->bq_queue, bp, b_freelist); in bremfree()
404 dp->bq_bytes -= bp->b_bufsize; in bremfree()
407 if (bp == dp->bq_marker) in bremfree()
411 bp->b_freelistindex = -1; in bremfree()
689 buf_t *bp; in bio_doread() local
692 bp = getblk(vp, blkno, size, 0, 0); in bio_doread()
697 if (bp == NULL) { in bio_doread()
707 if (!ISSET(bp->b_oflags, (BO_DONE | BO_DELWRI))) { in bio_doread()
709 SET(bp->b_flags, B_READ | async); in bio_doread()
711 BIO_SETPRIO(bp, BPRIO_TIMELIMITED); in bio_doread()
713 BIO_SETPRIO(bp, BPRIO_TIMECRITICAL); in bio_doread()
714 VOP_STRATEGY(vp, bp); in bio_doread()
719 brelse(bp, 0); in bio_doread()
738 return bp; in bio_doread()
748 buf_t *bp; in bread() local
754 bp = *bpp = bio_doread(vp, blkno, size, 0); in bread()
755 if (bp == NULL) in bread()
759 error = biowait(bp); in bread()
761 error = fscow_run(bp, true); in bread()
763 brelse(bp, 0); in bread()
778 buf_t *bp; in breadn() local
783 bp = *bpp = bio_doread(vp, blkno, size, 0); in breadn()
784 if (bp == NULL) in breadn()
804 error = biowait(bp); in breadn()
806 error = fscow_run(bp, true); in breadn()
808 brelse(bp, 0); in breadn()
819 bwrite(buf_t *bp) in bwrite() argument
826 (uintptr_t)bp, 0, 0, 0); in bwrite()
828 KASSERT(ISSET(bp->b_cflags, BC_BUSY)); in bwrite()
829 KASSERT(!cv_has_waiters(&bp->b_done)); in bwrite()
831 vp = bp->b_vp; in bwrite()
841 KASSERT(bp->b_objlock == vp->v_interlock); in bwrite()
851 if (bp->b_iodone != mp->mnt_wapbl_op->wo_wapbl_biodone) { in bwrite()
852 bdwrite(bp); in bwrite()
864 sync = !ISSET(bp->b_flags, B_ASYNC); in bwrite()
866 bdwrite(bp); in bwrite()
886 bp->b_error = 0; in bwrite()
887 wasdelayed = ISSET(bp->b_oflags, BO_DELWRI); in bwrite()
888 CLR(bp->b_flags, B_READ); in bwrite()
891 mutex_enter(bp->b_objlock); in bwrite()
892 CLR(bp->b_oflags, BO_DONE | BO_DELWRI); in bwrite()
893 reassignbuf(bp, bp->b_vp); in bwrite()
895 cv_broadcast(&bp->b_busy); in bwrite()
899 mutex_enter(bp->b_objlock); in bwrite()
900 CLR(bp->b_oflags, BO_DONE | BO_DELWRI); in bwrite()
904 mutex_exit(bp->b_objlock); in bwrite()
908 BIO_SETPRIO(bp, BPRIO_TIMECRITICAL); in bwrite()
910 BIO_SETPRIO(bp, BPRIO_TIMELIMITED); in bwrite()
912 VOP_STRATEGY(vp, bp); in bwrite()
916 rv = biowait(bp); in bwrite()
919 brelse(bp, 0); in bwrite()
949 bdwrite(buf_t *bp) in bdwrite() argument
953 (uintptr_t)bp, 0, 0, 0); in bdwrite()
955 KASSERT(bp->b_vp == NULL || bp->b_vp->v_tag != VT_UFS || in bdwrite()
956 bp->b_vp->v_type == VBLK || ISSET(bp->b_flags, B_COWDONE)); in bdwrite()
957 KASSERT(ISSET(bp->b_cflags, BC_BUSY)); in bdwrite()
958 KASSERT(!cv_has_waiters(&bp->b_done)); in bdwrite()
961 if (bdev_type(bp->b_dev) == D_TAPE) { in bdwrite()
962 bawrite(bp); in bdwrite()
966 if (wapbl_vphaswapbl(bp->b_vp)) { in bdwrite()
967 struct mount *mp = wapbl_vptomp(bp->b_vp); in bdwrite()
969 if (bp->b_iodone != mp->mnt_wapbl_op->wo_wapbl_biodone) { in bdwrite()
970 WAPBL_ADD_BUF(mp, bp); in bdwrite()
980 KASSERT(bp->b_vp == NULL || bp->b_objlock == bp->b_vp->v_interlock); in bdwrite()
982 if (!ISSET(bp->b_oflags, BO_DELWRI)) { in bdwrite()
984 mutex_enter(bp->b_objlock); in bdwrite()
985 SET(bp->b_oflags, BO_DELWRI); in bdwrite()
987 reassignbuf(bp, bp->b_vp); in bdwrite()
989 cv_broadcast(&bp->b_busy); in bdwrite()
992 mutex_enter(bp->b_objlock); in bdwrite()
995 CLR(bp->b_oflags, BO_DONE); in bdwrite()
996 mutex_exit(bp->b_objlock); in bdwrite()
998 brelse(bp, 0); in bdwrite()
1005 bawrite(buf_t *bp) in bawrite() argument
1008 KASSERT(ISSET(bp->b_cflags, BC_BUSY)); in bawrite()
1009 KASSERT(bp->b_vp != NULL); in bawrite()
1011 SET(bp->b_flags, B_ASYNC); in bawrite()
1012 VOP_BWRITE(bp->b_vp, bp); in bawrite()
1020 brelsel(buf_t *bp, int set) in brelsel() argument
1025 SDT_PROBE2(io, kernel, , brelse, bp, set); in brelsel()
1027 KASSERT(bp != NULL); in brelsel()
1029 KASSERT(!cv_has_waiters(&bp->b_done)); in brelsel()
1031 SET(bp->b_cflags, set); in brelsel()
1033 KASSERT(ISSET(bp->b_cflags, BC_BUSY)); in brelsel()
1034 KASSERT(bp->b_iodone == NULL); in brelsel()
1040 if (ISSET(bp->b_cflags, BC_WANTED)) in brelsel()
1041 CLR(bp->b_cflags, BC_WANTED|BC_AGE); in brelsel()
1044 if (ISSET(bp->b_flags, B_COWDONE)) { in brelsel()
1045 mutex_enter(bp->b_objlock); in brelsel()
1046 if (!ISSET(bp->b_oflags, BO_DELWRI)) in brelsel()
1047 CLR(bp->b_flags, B_COWDONE); in brelsel()
1048 mutex_exit(bp->b_objlock); in brelsel()
1056 if (ISSET(bp->b_flags, B_LOCKED)) in brelsel()
1057 bp->b_error = 0; in brelsel()
1060 if (ISSET(bp->b_cflags, BC_NOCACHE) || bp->b_error != 0) in brelsel()
1061 SET(bp->b_cflags, BC_INVAL); in brelsel()
1063 if (ISSET(bp->b_cflags, BC_VFLUSH)) { in brelsel()
1070 CLR(bp->b_cflags, BC_VFLUSH); in brelsel()
1071 if (!ISSET(bp->b_cflags, BC_INVAL|BC_AGE) && in brelsel()
1072 !ISSET(bp->b_flags, B_LOCKED) && bp->b_error == 0) { in brelsel()
1073 KDASSERT(checkfreelist(bp, &bufqueues[BQ_LRU], 1)); in brelsel()
1076 bremfree(bp); in brelsel()
1080 KDASSERT(checkfreelist(bp, &bufqueues[BQ_AGE], 0)); in brelsel()
1081 KDASSERT(checkfreelist(bp, &bufqueues[BQ_LRU], 0)); in brelsel()
1082 KDASSERT(checkfreelist(bp, &bufqueues[BQ_LOCKED], 0)); in brelsel()
1084 if ((bp->b_bufsize <= 0) || ISSET(bp->b_cflags, BC_INVAL)) { in brelsel()
1089 if (ISSET(bp->b_flags, B_LOCKED)) { in brelsel()
1090 if (wapbl_vphaswapbl(vp = bp->b_vp)) { in brelsel()
1093 KASSERT(bp->b_iodone != in brelsel()
1095 WAPBL_REMOVE_BUF(mp, bp); in brelsel()
1099 mutex_enter(bp->b_objlock); in brelsel()
1100 CLR(bp->b_oflags, BO_DONE|BO_DELWRI); in brelsel()
1101 if ((vp = bp->b_vp) != NULL) { in brelsel()
1102 KASSERT(bp->b_objlock == vp->v_interlock); in brelsel()
1103 reassignbuf(bp, bp->b_vp); in brelsel()
1104 brelvp(bp); in brelsel()
1107 KASSERT(bp->b_objlock == &buffer_lock); in brelsel()
1108 mutex_exit(bp->b_objlock); in brelsel()
1111 cv_broadcast(&bp->b_busy); in brelsel()
1112 if (bp->b_bufsize <= 0) in brelsel()
1118 binsheadfree(bp, bufq); in brelsel()
1128 if (ISSET(bp->b_flags, B_LOCKED)) { in brelsel()
1131 } else if (!ISSET(bp->b_cflags, BC_AGE)) { in brelsel()
1138 binstailfree(bp, bufq); in brelsel()
1142 CLR(bp->b_cflags, BC_AGE|BC_BUSY|BC_NOCACHE); in brelsel()
1143 CLR(bp->b_flags, B_ASYNC); in brelsel()
1154 if (bp->b_bufsize <= 0) { in brelsel()
1155 cv_broadcast(&bp->b_busy); in brelsel()
1156 buf_destroy(bp); in brelsel()
1158 memset((char *)bp, 0, sizeof(*bp)); in brelsel()
1160 pool_cache_put(buf_cache, bp); in brelsel()
1162 cv_signal(&bp->b_busy); in brelsel()
1166 brelse(buf_t *bp, int set) in brelse() argument
1170 brelsel(bp, set); in brelse()
1184 buf_t *bp; in incore() local
1189 LIST_FOREACH(bp, BUFHASH(vp, blkno), b_hash) { in incore()
1190 if (bp->b_lblkno == blkno && bp->b_vp == vp && in incore()
1191 !ISSET(bp->b_cflags, BC_INVAL)) { in incore()
1192 KASSERT(bp->b_objlock == vp->v_interlock); in incore()
1193 return (bp); in incore()
1212 buf_t *bp; in getblk() local
1217 bp = incore(vp, blkno); in getblk()
1218 if (bp != NULL) { in getblk()
1219 err = bbusy(bp, ((slpflag & PCATCH) != 0), slptimeo, NULL); in getblk()
1228 KASSERT(!cv_has_waiters(&bp->b_done)); in getblk()
1230 if (ISSET(bp->b_oflags, BO_DONE|BO_DELWRI) && in getblk()
1231 bp->b_bcount < size && vp->v_type != VBLK) in getblk()
1234 bremfree(bp); in getblk()
1237 if ((bp = getnewbuf(slpflag, slptimeo, 0)) == NULL) in getblk()
1242 brelsel(bp, 0); in getblk()
1246 LIST_INSERT_HEAD(BUFHASH(vp, blkno), bp, b_hash); in getblk()
1247 bp->b_blkno = bp->b_lblkno = bp->b_rawblkno = blkno; in getblk()
1249 bgetvp(vp, bp); in getblk()
1259 if (ISSET(bp->b_flags, B_LOCKED)) { in getblk()
1260 KASSERT(bp->b_bufsize >= size); in getblk()
1262 if (allocbuf(bp, size, preserve)) { in getblk()
1264 LIST_REMOVE(bp, b_hash); in getblk()
1265 brelsel(bp, BC_INVAL); in getblk()
1272 BIO_SETPRIO(bp, BPRIO_DEFAULT); in getblk()
1273 SDT_PROBE4(io, kernel, , getblk__done, vp, blkno, size, bp); in getblk()
1274 return bp; in getblk()
1283 buf_t *bp; in geteblk() local
1287 while ((bp = getnewbuf(0, 0, 0)) == NULL) in geteblk()
1290 SET(bp->b_cflags, BC_INVAL); in geteblk()
1291 LIST_INSERT_HEAD(&invalhash, bp, b_hash); in geteblk()
1293 BIO_SETPRIO(bp, BPRIO_DEFAULT); in geteblk()
1294 error = allocbuf(bp, size, 0); in geteblk()
1296 return bp; in geteblk()
1308 allocbuf(buf_t *bp, int size, int preserve) in allocbuf() argument
1319 oldcount = bp->b_bcount; in allocbuf()
1321 bp->b_bcount = size; in allocbuf()
1323 oldsize = bp->b_bufsize; in allocbuf()
1341 memcpy(addr, bp->b_data, MIN(oldsize,desired_size)); in allocbuf()
1342 if (bp->b_data != NULL) in allocbuf()
1343 buf_mrelease(bp->b_data, oldsize); in allocbuf()
1344 bp->b_data = addr; in allocbuf()
1345 bp->b_bufsize = desired_size; in allocbuf()
1370 if (wapbl_vphaswapbl(bp->b_vp)) { in allocbuf()
1371 WAPBL_RESIZE_BUF(wapbl_vptomp(bp->b_vp), bp, in allocbuf()
1389 buf_t *bp; in getnewbuf() local
1403 bp = pool_cache_get(buf_cache, PR_NOWAIT); in getnewbuf()
1404 if (bp != NULL) { in getnewbuf()
1405 memset((char *)bp, 0, sizeof(*bp)); in getnewbuf()
1406 buf_init(bp); in getnewbuf()
1407 SET(bp->b_cflags, BC_BUSY); /* mark buffer busy */ in getnewbuf()
1410 bp->b_freelistindex = -1; in getnewbuf()
1412 SDT_PROBE1(io, kernel, , getnewbuf__done, bp); in getnewbuf()
1413 return bp; in getnewbuf()
1419 if ((bp = TAILQ_FIRST(&bufqueues[BQ_AGE].bq_queue)) != NULL) { in getnewbuf()
1420 KASSERT(!ISSET(bp->b_oflags, BO_DELWRI)); in getnewbuf()
1422 TAILQ_FOREACH(bp, &bufqueues[BQ_LRU].bq_queue, b_freelist) { in getnewbuf()
1423 if (ISSET(bp->b_cflags, BC_VFLUSH) || in getnewbuf()
1424 !ISSET(bp->b_oflags, BO_DELWRI)) in getnewbuf()
1426 if (fstrans_start_nowait(bp->b_vp->v_mount) == 0) { in getnewbuf()
1428 transmp = bp->b_vp->v_mount; in getnewbuf()
1433 if (bp != NULL) { in getnewbuf()
1434 KASSERT(!ISSET(bp->b_cflags, BC_BUSY) || in getnewbuf()
1435 ISSET(bp->b_cflags, BC_VFLUSH)); in getnewbuf()
1436 bremfree(bp); in getnewbuf()
1439 SET(bp->b_cflags, BC_BUSY); in getnewbuf()
1442 cv_broadcast(&bp->b_busy); in getnewbuf()
1461 if (bp->b_bufsize <= 0) in getnewbuf()
1462 panic("buffer %p: on queue but empty", bp); in getnewbuf()
1465 if (ISSET(bp->b_cflags, BC_VFLUSH)) { in getnewbuf()
1471 CLR(bp->b_cflags, BC_VFLUSH); in getnewbuf()
1472 SET(bp->b_cflags, BC_AGE); in getnewbuf()
1476 KASSERT(ISSET(bp->b_cflags, BC_BUSY)); in getnewbuf()
1477 KASSERT(!cv_has_waiters(&bp->b_done)); in getnewbuf()
1483 if (ISSET(bp->b_oflags, BO_DELWRI)) { in getnewbuf()
1488 SET(bp->b_cflags, BC_AGE); in getnewbuf()
1490 bawrite(bp); in getnewbuf()
1500 vp = bp->b_vp; in getnewbuf()
1503 bp->b_cflags = BC_BUSY; in getnewbuf()
1504 bp->b_oflags = 0; in getnewbuf()
1505 bp->b_flags = 0; in getnewbuf()
1506 bp->b_dev = NODEV; in getnewbuf()
1507 bp->b_blkno = 0; in getnewbuf()
1508 bp->b_lblkno = 0; in getnewbuf()
1509 bp->b_rawblkno = 0; in getnewbuf()
1510 bp->b_iodone = 0; in getnewbuf()
1511 bp->b_error = 0; in getnewbuf()
1512 bp->b_resid = 0; in getnewbuf()
1513 bp->b_bcount = 0; in getnewbuf()
1515 LIST_REMOVE(bp, b_hash); in getnewbuf()
1520 brelvp(bp); in getnewbuf()
1524 SDT_PROBE1(io, kernel, , getnewbuf__done, bp); in getnewbuf()
1525 return bp; in getnewbuf()
1534 buf_t *bp; in binvalbuf() local
1540 bp = incore(vp, blkno); in binvalbuf()
1541 if (bp != NULL) { in binvalbuf()
1542 err = bbusy(bp, 0, 0, NULL); in binvalbuf()
1545 bremfree(bp); in binvalbuf()
1546 if (ISSET(bp->b_oflags, BO_DELWRI)) { in binvalbuf()
1547 SET(bp->b_cflags, BC_NOCACHE); in binvalbuf()
1549 bwrite(bp); in binvalbuf()
1551 brelsel(bp, BC_INVAL); in binvalbuf()
1566 buf_t *bp; in buf_trim() local
1572 if ((bp = getnewbuf(PCATCH, 1, 1)) == NULL) in buf_trim()
1575 KASSERT((bp->b_cflags & BC_WANTED) == 0); in buf_trim()
1576 size = bp->b_bufsize; in buf_trim()
1579 buf_mrelease(bp->b_data, size); in buf_trim()
1580 bp->b_bcount = bp->b_bufsize = 0; in buf_trim()
1583 brelsel(bp, 0); in buf_trim()
1609 biowait(buf_t *bp) in biowait() argument
1614 KASSERT(ISSET(bp->b_cflags, BC_BUSY)); in biowait()
1616 SDT_PROBE1(io, kernel, , wait__start, bp); in biowait()
1618 mutex_enter(bp->b_objlock); in biowait()
1621 (uintptr_t)bp, bp->b_oflags, in biowait()
1624 while (!ISSET(bp->b_oflags, BO_DONE | BO_DELWRI)) { in biowait()
1626 (uintptr_t)bp, 0, 0, 0); in biowait()
1627 cv_wait(&bp->b_done, bp->b_objlock); in biowait()
1629 mutex_exit(bp->b_objlock); in biowait()
1631 SDT_PROBE1(io, kernel, , wait__done, bp); in biowait()
1633 BIOHIST_LOG(biohist, "return %jd", bp->b_error, 0, 0, 0); in biowait()
1635 return bp->b_error; in biowait()
1655 biodone(buf_t *bp) in biodone() argument
1661 KASSERT(!ISSET(bp->b_oflags, BO_DONE)); in biodone()
1666 TAILQ_INSERT_TAIL(&curcpu()->ci_data.cpu_biodone, bp, b_actq); in biodone()
1669 (uintptr_t)bp, 0, 0, 0); in biodone()
1674 biodone2(bp); in biodone()
1681 biodone2(buf_t *bp) in biodone2() argument
1685 SDT_PROBE1(io, kernel, ,done, bp); in biodone2()
1688 BIOHIST_CALLARGS(biohist, "bp=%#jx", (uintptr_t)bp, 0, 0, 0); in biodone2()
1690 mutex_enter(bp->b_objlock); in biodone2()
1692 if (ISSET(bp->b_oflags, BO_DONE)) in biodone2()
1694 CLR(bp->b_flags, B_COWDONE); in biodone2()
1695 SET(bp->b_oflags, BO_DONE); in biodone2()
1696 BIO_SETPRIO(bp, BPRIO_DEFAULT); in biodone2()
1699 if (!ISSET(bp->b_flags, B_READ)) in biodone2()
1700 vwakeup(bp); in biodone2()
1702 if ((callout = bp->b_iodone) != NULL) { in biodone2()
1707 KASSERT(!cv_has_waiters(&bp->b_done)); in biodone2()
1708 bp->b_iodone = NULL; in biodone2()
1709 mutex_exit(bp->b_objlock); in biodone2()
1710 (*callout)(bp); in biodone2()
1711 } else if (ISSET(bp->b_flags, B_ASYNC)) { in biodone2()
1714 KASSERT(!cv_has_waiters(&bp->b_done)); in biodone2()
1715 mutex_exit(bp->b_objlock); in biodone2()
1716 brelse(bp, 0); in biodone2()
1720 cv_broadcast(&bp->b_done); in biodone2()
1721 mutex_exit(bp->b_objlock); in biodone2()
1729 buf_t *bp; in biointr() local
1740 bp = TAILQ_FIRST(&ci->ci_data.cpu_biodone); in biointr()
1741 TAILQ_REMOVE(&ci->ci_data.cpu_biodone, bp, b_actq); in biointr()
1744 BIOHIST_LOG(biohist, "bp=%#jx", (uintptr_t)bp, 0, 0, 0); in biointr()
1745 biodone2(bp); in biointr()
1779 buf_t *bp; in sysctl_dobuf() local
1830 TAILQ_FOREACH(bp, &bq->bq_queue, b_freelist) { in sysctl_dobuf()
1831 bq->bq_marker = bp; in sysctl_dobuf()
1833 sysctl_fillbuf(bp, &bs); in sysctl_dobuf()
1839 if (bq->bq_marker != bp) { in sysctl_dobuf()
1975 buf_t *bp; in bufhash_stats() local
1989 LIST_FOREACH(bp, &bufhashtbl[i], b_hash) { in bufhash_stats()
2016 buf_t *bp; in vfs_bufstats() local
2024 TAILQ_FOREACH(bp, &dp->bq_queue, b_freelist) { in vfs_bufstats()
2025 counts[bp->b_bufsize / PAGE_SIZE]++; in vfs_bufstats()
2042 buf_t *bp; in getiobuf() local
2044 bp = pool_cache_get(bufio_cache, (waitok ? PR_WAITOK : PR_NOWAIT)); in getiobuf()
2045 if (bp == NULL) in getiobuf()
2046 return bp; in getiobuf()
2048 buf_init(bp); in getiobuf()
2050 if ((bp->b_vp = vp) != NULL) { in getiobuf()
2051 bp->b_objlock = vp->v_interlock; in getiobuf()
2053 KASSERT(bp->b_objlock == &buffer_lock); in getiobuf()
2056 return bp; in getiobuf()
2060 putiobuf(buf_t *bp) in putiobuf() argument
2063 buf_destroy(bp); in putiobuf()
2064 pool_cache_put(bufio_cache, bp); in putiobuf()
2072 nestiobuf_iodone(buf_t *bp) in nestiobuf_iodone() argument
2074 buf_t *mbp = bp->b_private; in nestiobuf_iodone()
2078 KASSERT(bp->b_bcount <= bp->b_bufsize); in nestiobuf_iodone()
2079 KASSERT(mbp != bp); in nestiobuf_iodone()
2081 error = bp->b_error; in nestiobuf_iodone()
2082 if (bp->b_error == 0 && in nestiobuf_iodone()
2083 (bp->b_bcount < bp->b_bufsize || bp->b_resid > 0)) { in nestiobuf_iodone()
2091 donebytes = bp->b_bufsize; in nestiobuf_iodone()
2093 putiobuf(bp); in nestiobuf_iodone()
2107 nestiobuf_setup(buf_t *mbp, buf_t *bp, int offset, size_t size) in nestiobuf_setup() argument
2113 bp->b_vp = vp; in nestiobuf_setup()
2114 bp->b_dev = mbp->b_dev; in nestiobuf_setup()
2115 bp->b_objlock = mbp->b_objlock; in nestiobuf_setup()
2116 bp->b_cflags = BC_BUSY; in nestiobuf_setup()
2117 bp->b_flags = B_ASYNC | b_pass; in nestiobuf_setup()
2118 bp->b_iodone = nestiobuf_iodone; in nestiobuf_setup()
2119 bp->b_data = (char *)mbp->b_data + offset; in nestiobuf_setup()
2120 bp->b_resid = bp->b_bcount = size; in nestiobuf_setup()
2121 bp->b_bufsize = bp->b_bcount; in nestiobuf_setup()
2122 bp->b_private = mbp; in nestiobuf_setup()
2123 BIO_COPYPRIO(bp, mbp); in nestiobuf_setup()
2124 if (BUF_ISWRITE(bp) && vp != NULL) { in nestiobuf_setup()
2160 buf_init(buf_t *bp) in buf_init() argument
2163 cv_init(&bp->b_busy, "biolock"); in buf_init()
2164 cv_init(&bp->b_done, "biowait"); in buf_init()
2165 bp->b_dev = NODEV; in buf_init()
2166 bp->b_error = 0; in buf_init()
2167 bp->b_flags = 0; in buf_init()
2168 bp->b_cflags = 0; in buf_init()
2169 bp->b_oflags = 0; in buf_init()
2170 bp->b_objlock = &buffer_lock; in buf_init()
2171 bp->b_iodone = NULL; in buf_init()
2172 bp->b_dev = NODEV; in buf_init()
2173 bp->b_vnbufs.le_next = NOLIST; in buf_init()
2174 BIO_SETPRIO(bp, BPRIO_DEFAULT); in buf_init()
2178 buf_destroy(buf_t *bp) in buf_destroy() argument
2181 cv_destroy(&bp->b_done); in buf_destroy()
2182 cv_destroy(&bp->b_busy); in buf_destroy()
2186 bbusy(buf_t *bp, bool intr, int timo, kmutex_t *interlock) in bbusy() argument
2192 SDT_PROBE4(io, kernel, , bbusy__start, bp, intr, timo, interlock); in bbusy()
2194 if ((bp->b_cflags & BC_BUSY) != 0) { in bbusy()
2199 bp->b_cflags |= BC_WANTED; in bbusy()
2203 error = cv_timedwait_sig(&bp->b_busy, &bufcache_lock, in bbusy()
2206 error = cv_timedwait(&bp->b_busy, &bufcache_lock, in bbusy()
2218 bp->b_cflags |= BC_BUSY; in bbusy()
2223 bp, intr, timo, interlock, error); in bbusy()