* Disassociate a buffer from a vnode. */
| 2474 | * Disassociate a buffer from a vnode. |
| 2475 | */ |
| 2476 | void |
| 2477 | brelvp(struct buf *bp) |
| 2478 | { |
| 2479 | struct bufobj *bo; |
| 2480 | struct vnode *vp; |
| 2481 | |
| 2482 | CTR3(KTR_BUF, "brelvp(%p) vp %p flags %X", bp, bp->b_vp, bp->b_flags); |
| 2483 | KASSERT(bp->b_vp != NULL, ("brelvp: NULL")); |
| 2484 | |
| 2485 | /* |
| 2486 | * Delete from old vnode list, if on one. |
| 2487 | */ |
| 2488 | vp = bp->b_vp; /* XXX */ |
| 2489 | bo = bp->b_bufobj; |
| 2490 | BO_LOCK(bo); |
| 2491 | buf_vlist_remove(bp); |
| 2492 | if ((bo->bo_flag & BO_ONWORKLST) && bo->bo_dirty.bv_cnt == 0) { |
| 2493 | bo->bo_flag &= ~BO_ONWORKLST; |
| 2494 | mtx_lock(&sync_mtx); |
| 2495 | LIST_REMOVE(bo, bo_synclist); |
| 2496 | syncer_worklist_len--; |
| 2497 | mtx_unlock(&sync_mtx); |
| 2498 | } |
| 2499 | bp->b_vp = NULL; |
| 2500 | bp->b_bufobj = NULL; |
| 2501 | BO_UNLOCK(bo); |
| 2502 | vdrop(vp); |
| 2503 | } |
| 2504 | |
| 2505 | /* |
| 2506 | * Add an item to the syncer work queue. |
no test coverage detected