Lines Matching refs:bo
110 static int flushbuflist(struct bufv *bufv, int flags, struct bufobj *bo,
125 static int v_inval_buf_range_locked(struct vnode *vp, struct bufobj *bo,
714 struct bufobj *bo; in vnode_fini() local
724 bo = &vp->v_bufobj; in vnode_fini()
725 rw_destroy(BO_LOCKPTR(bo)); in vnode_fini()
2179 struct bufobj *bo; in freevnode() local
2196 bo = &vp->v_bufobj; in freevnode()
2201 VNASSERT(bo->bo_numoutput == 0, vp, ("Clean vnode has pending I/O's")); in freevnode()
2202 VNASSERT(bo->bo_clean.bv_cnt == 0, vp, ("cleanbufcnt not 0")); in freevnode()
2203 VNASSERT(pctrie_is_empty(&bo->bo_clean.bv_root), vp, in freevnode()
2205 VNASSERT(bo->bo_dirty.bv_cnt == 0, vp, ("dirtybufcnt not 0")); in freevnode()
2206 VNASSERT(pctrie_is_empty(&bo->bo_dirty.bv_root), vp, in freevnode()
2233 bo->bo_flag = 0; in freevnode()
2336 bufobj_invalbuf(struct bufobj *bo, int flags, int slpflag, int slptimeo) in bufobj_invalbuf() argument
2340 BO_LOCK(bo); in bufobj_invalbuf()
2342 error = bufobj_wwait(bo, slpflag, slptimeo); in bufobj_invalbuf()
2344 BO_UNLOCK(bo); in bufobj_invalbuf()
2347 if (bo->bo_dirty.bv_cnt > 0) { in bufobj_invalbuf()
2348 BO_UNLOCK(bo); in bufobj_invalbuf()
2350 error = BO_SYNC(bo, MNT_WAIT); in bufobj_invalbuf()
2354 BO_LOCK(bo); in bufobj_invalbuf()
2355 if (bo->bo_numoutput > 0 || bo->bo_dirty.bv_cnt > 0) { in bufobj_invalbuf()
2356 BO_UNLOCK(bo); in bufobj_invalbuf()
2367 error = flushbuflist(&bo->bo_clean, in bufobj_invalbuf()
2368 flags, bo, slpflag, slptimeo); in bufobj_invalbuf()
2370 error = flushbuflist(&bo->bo_dirty, in bufobj_invalbuf()
2371 flags, bo, slpflag, slptimeo); in bufobj_invalbuf()
2373 BO_UNLOCK(bo); in bufobj_invalbuf()
2384 bufobj_wwait(bo, 0, 0); in bufobj_invalbuf()
2385 if ((flags & V_VMIO) == 0 && bo->bo_object != NULL) { in bufobj_invalbuf()
2386 BO_UNLOCK(bo); in bufobj_invalbuf()
2387 vm_object_pip_wait_unlocked(bo->bo_object, "bovlbx"); in bufobj_invalbuf()
2388 BO_LOCK(bo); in bufobj_invalbuf()
2390 } while (bo->bo_numoutput > 0); in bufobj_invalbuf()
2391 BO_UNLOCK(bo); in bufobj_invalbuf()
2396 if (bo->bo_object != NULL && in bufobj_invalbuf()
2398 VM_OBJECT_WLOCK(bo->bo_object); in bufobj_invalbuf()
2399 vm_object_page_remove(bo->bo_object, 0, 0, (flags & V_SAVE) ? in bufobj_invalbuf()
2401 VM_OBJECT_WUNLOCK(bo->bo_object); in bufobj_invalbuf()
2405 BO_LOCK(bo); in bufobj_invalbuf()
2407 V_ALLOWCLEAN)) == 0 && (bo->bo_dirty.bv_cnt > 0 || in bufobj_invalbuf()
2408 bo->bo_clean.bv_cnt > 0)) in bufobj_invalbuf()
2411 bo->bo_dirty.bv_cnt > 0) in bufobj_invalbuf()
2413 BO_UNLOCK(bo); in bufobj_invalbuf()
2438 flushbuflist(struct bufv *bufv, int flags, struct bufobj *bo, int slpflag, in flushbuflist() argument
2446 ASSERT_BO_WLOCKED(bo); in flushbuflist()
2468 LK_EXCLUSIVE | LK_SLEEPFAIL | LK_INTERLOCK, BO_LOCKPTR(bo), in flushbuflist()
2471 BO_LOCK(bo); in flushbuflist()
2474 KASSERT(bp->b_bufobj == bo, in flushbuflist()
2476 bp, bp->b_bufobj, bo)); in flushbuflist()
2488 BO_LOCK(bo); in flushbuflist()
2495 BO_LOCK(bo); in flushbuflist()
2498 nbp = gbincore(bo, lblkno); in flushbuflist()
2507 bnoreuselist(struct bufv *bufv, struct bufobj *bo, daddr_t startn, daddr_t endn) in bnoreuselist() argument
2513 ASSERT_BO_LOCKED(bo); in bnoreuselist()
2521 LK_INTERLOCK, BO_LOCKPTR(bo), "brlsfl", 0, 0); in bnoreuselist()
2523 BO_RLOCK(bo); in bnoreuselist()
2528 KASSERT(bp->b_bufobj == bo, in bnoreuselist()
2530 bp, bp->b_bufobj, bo)); in bnoreuselist()
2544 BO_RLOCK(bo); in bnoreuselist()
2558 struct bufobj *bo; in vtruncbuf() local
2571 bo = &vp->v_bufobj; in vtruncbuf()
2573 BO_LOCK(bo); in vtruncbuf()
2575 while (v_inval_buf_range_locked(vp, bo, startlbn, INT64_MAX) == EAGAIN) in vtruncbuf()
2583 TAILQ_FOREACH_SAFE(bp, &bo->bo_dirty.bv_hd, b_bobufs, nbp) { in vtruncbuf()
2592 BO_LOCKPTR(bo)) == ENOLCK) in vtruncbuf()
2600 BO_LOCK(bo); in vtruncbuf()
2605 bufobj_wwait(bo, 0, 0); in vtruncbuf()
2606 BO_UNLOCK(bo); in vtruncbuf()
2620 struct bufobj *bo; in v_inval_buf_range() local
2628 bo = &vp->v_bufobj; in v_inval_buf_range()
2629 BO_LOCK(bo); in v_inval_buf_range()
2630 MPASS(blksize == bo->bo_bsize); in v_inval_buf_range()
2632 while (v_inval_buf_range_locked(vp, bo, startlbn, endlbn) == EAGAIN) in v_inval_buf_range()
2635 BO_UNLOCK(bo); in v_inval_buf_range()
2640 v_inval_buf_range_locked(struct vnode *vp, struct bufobj *bo, in v_inval_buf_range_locked() argument
2649 ASSERT_BO_LOCKED(bo); in v_inval_buf_range_locked()
2654 bv = clean ? &bo->bo_clean : &bo->bo_dirty; in v_inval_buf_range_locked()
2663 BO_LOCKPTR(bo)) == ENOLCK) { in v_inval_buf_range_locked()
2664 BO_LOCK(bo); in v_inval_buf_range_locked()
2674 BO_LOCK(bo); in v_inval_buf_range_locked()
2716 buf_vlist_find_or_add(struct buf *bp, struct bufobj *bo, b_xflags_t xflags) in buf_vlist_find_or_add() argument
2722 ASSERT_BO_WLOCKED(bo); in buf_vlist_find_or_add()
2723 KASSERT((bo->bo_flag & BO_NOBUFS) == 0, in buf_vlist_find_or_add()
2724 ("buf_vlist_add: bo %p does not allow bufs", bo)); in buf_vlist_find_or_add()
2725 KASSERT((xflags & BX_VNDIRTY) == 0 || (bo->bo_flag & BO_DEAD) == 0, in buf_vlist_find_or_add()
2726 ("dead bo %p", bo)); in buf_vlist_find_or_add()
2731 bv = &bo->bo_dirty; in buf_vlist_find_or_add()
2733 bv = &bo->bo_clean; in buf_vlist_find_or_add()
2778 buf_vlist_add(struct buf *bp, struct bufobj *bo, b_xflags_t xflags) in buf_vlist_add() argument
2785 error = buf_vlist_find_or_add(bp, bo, xflags); in buf_vlist_add()
2794 gbincore(struct bufobj *bo, daddr_t lblkno) in gbincore() argument
2798 ASSERT_BO_LOCKED(bo); in gbincore()
2799 bp = BUF_PCTRIE_LOOKUP(&bo->bo_clean.bv_root, lblkno); in gbincore()
2802 return (BUF_PCTRIE_LOOKUP(&bo->bo_dirty.bv_root, lblkno)); in gbincore()
2812 gbincore_unlocked(struct bufobj *bo, daddr_t lblkno) in gbincore_unlocked() argument
2816 ASSERT_BO_UNLOCKED(bo); in gbincore_unlocked()
2817 bp = BUF_PCTRIE_LOOKUP_UNLOCKED(&bo->bo_clean.bv_root, lblkno); in gbincore_unlocked()
2820 return (BUF_PCTRIE_LOOKUP_UNLOCKED(&bo->bo_dirty.bv_root, lblkno)); in gbincore_unlocked()
2829 struct bufobj *bo; in bgetvp() local
2832 bo = &vp->v_bufobj; in bgetvp()
2833 ASSERT_BO_UNLOCKED(bo); in bgetvp()
2845 bp->b_bufobj = bo; in bgetvp()
2848 BO_LOCK(bo); in bgetvp()
2849 if (BUF_PCTRIE_LOOKUP(&bo->bo_dirty.bv_root, bp->b_lblkno) == NULL) in bgetvp()
2850 error = buf_vlist_find_or_add(bp, bo, BX_VNCLEAN); in bgetvp()
2851 BO_UNLOCK(bo); in bgetvp()
2870 struct bufobj *bo; in brelvp() local
2880 bo = bp->b_bufobj; in brelvp()
2881 BO_LOCK(bo); in brelvp()
2883 if ((bo->bo_flag & BO_ONWORKLST) && bo->bo_dirty.bv_cnt == 0) { in brelvp()
2884 bo->bo_flag &= ~BO_ONWORKLST; in brelvp()
2886 LIST_REMOVE(bo, bo_synclist); in brelvp()
2892 BO_UNLOCK(bo); in brelvp()
2900 vn_syncer_add_to_worklist(struct bufobj *bo, int delay) in vn_syncer_add_to_worklist() argument
2904 ASSERT_BO_WLOCKED(bo); in vn_syncer_add_to_worklist()
2907 if (bo->bo_flag & BO_ONWORKLST) in vn_syncer_add_to_worklist()
2908 LIST_REMOVE(bo, bo_synclist); in vn_syncer_add_to_worklist()
2910 bo->bo_flag |= BO_ONWORKLST; in vn_syncer_add_to_worklist()
2918 LIST_INSERT_HEAD(&syncer_workitem_pending[slot], bo, bo_synclist); in vn_syncer_add_to_worklist()
2948 sync_vnode(struct synclist *slp, struct bufobj **bo, struct thread *td) in sync_vnode() argument
2953 *bo = LIST_FIRST(slp); in sync_vnode()
2954 if (*bo == NULL) in sync_vnode()
2956 vp = bo2vnode(*bo); in sync_vnode()
2971 return (*bo == LIST_FIRST(slp)); in sync_vnode()
2980 BO_LOCK(*bo); in sync_vnode()
2981 if (((*bo)->bo_flag & BO_ONWORKLST) != 0) { in sync_vnode()
2988 vn_syncer_add_to_worklist(*bo, syncdelay); in sync_vnode()
2990 BO_UNLOCK(*bo); in sync_vnode()
3005 struct bufobj *bo; in sched_sync() local
3079 error = sync_vnode(slp, &bo, td); in sched_sync()
3081 LIST_REMOVE(bo, bo_synclist); in sched_sync()
3082 LIST_INSERT_HEAD(next, bo, bo_synclist); in sched_sync()
3203 struct bufobj *bo; in reassignbuf() local
3210 bo = bp->b_bufobj; in reassignbuf()
3218 BO_LOCK(bo); in reassignbuf()
3219 if ((bo->bo_flag & BO_NONSTERILE) == 0) { in reassignbuf()
3226 bo->bo_flag |= BO_NONSTERILE; in reassignbuf()
3236 if ((bo->bo_flag & BO_ONWORKLST) == 0) { in reassignbuf()
3247 vn_syncer_add_to_worklist(bo, delay); in reassignbuf()
3249 buf_vlist_add(bp, bo, BX_VNDIRTY); in reassignbuf()
3251 buf_vlist_add(bp, bo, BX_VNCLEAN); in reassignbuf()
3253 if ((bo->bo_flag & BO_ONWORKLST) && bo->bo_dirty.bv_cnt == 0) { in reassignbuf()
3255 LIST_REMOVE(bo, bo_synclist); in reassignbuf()
3258 bo->bo_flag &= ~BO_ONWORKLST; in reassignbuf()
3262 bv = &bo->bo_clean; in reassignbuf()
3264 KASSERT(bp == NULL || bp->b_bufobj == bo, in reassignbuf()
3265 ("bp %p wrong b_bufobj %p should be %p", bp, bp->b_bufobj, bo)); in reassignbuf()
3267 KASSERT(bp == NULL || bp->b_bufobj == bo, in reassignbuf()
3268 ("bp %p wrong b_bufobj %p should be %p", bp, bp->b_bufobj, bo)); in reassignbuf()
3269 bv = &bo->bo_dirty; in reassignbuf()
3271 KASSERT(bp == NULL || bp->b_bufobj == bo, in reassignbuf()
3272 ("bp %p wrong b_bufobj %p should be %p", bp, bp->b_bufobj, bo)); in reassignbuf()
3274 KASSERT(bp == NULL || bp->b_bufobj == bo, in reassignbuf()
3275 ("bp %p wrong b_bufobj %p should be %p", bp, bp->b_bufobj, bo)); in reassignbuf()
3277 BO_UNLOCK(bo); in reassignbuf()
5331 struct bufobj *bo; in vfs_allocate_syncvnode() local
5364 bo = &vp->v_bufobj; in vfs_allocate_syncvnode()
5365 BO_LOCK(bo); in vfs_allocate_syncvnode()
5366 vn_syncer_add_to_worklist(bo, syncdelay > 0 ? next % syncdelay : 0); in vfs_allocate_syncvnode()
5375 BO_UNLOCK(bo); in vfs_allocate_syncvnode()
5406 struct bufobj *bo; in sync_fsync() local
5417 bo = &syncvp->v_bufobj; in sync_fsync()
5418 BO_LOCK(bo); in sync_fsync()
5419 vn_syncer_add_to_worklist(bo, syncdelay); in sync_fsync()
5420 BO_UNLOCK(bo); in sync_fsync()
5462 struct bufobj *bo; in sync_reclaim() local
5464 bo = &vp->v_bufobj; in sync_reclaim()
5465 BO_LOCK(bo); in sync_reclaim()
5469 if (bo->bo_flag & BO_ONWORKLST) { in sync_reclaim()
5470 LIST_REMOVE(bo, bo_synclist); in sync_reclaim()
5473 bo->bo_flag &= ~BO_ONWORKLST; in sync_reclaim()
5476 BO_UNLOCK(bo); in sync_reclaim()