- }
- if (vp->v_dirtyblkhd || vp->v_cleanblkhd)
- panic("vinvalbuf: flush failed");
- return (dirty);
-}
-
-/*
- * Associate a buffer with a vnode.
- */
-bgetvp(vp, bp)
- register struct vnode *vp;
- register struct buf *bp;
-{
-
- if (bp->b_vp)
- panic("bgetvp: not free");
- VHOLD(vp);
- bp->b_vp = vp;
- if (vp->v_type == VBLK || vp->v_type == VCHR)
- bp->b_dev = vp->v_rdev;
- else
- bp->b_dev = NODEV;
- /*
- * Insert onto list for new vnode.
- */
- if (vp->v_cleanblkhd) {
- bp->b_blockf = vp->v_cleanblkhd;
- bp->b_blockb = &vp->v_cleanblkhd;
- vp->v_cleanblkhd->b_blockb = &bp->b_blockf;
- vp->v_cleanblkhd = bp;
- } else {
- vp->v_cleanblkhd = bp;
- bp->b_blockb = &vp->v_cleanblkhd;
- bp->b_blockf = NULL;
- }
-}
-
-/*
- * Disassociate a buffer from a vnode.
- */
-brelvp(bp)
- register struct buf *bp;
-{
- struct buf *bq;
- struct vnode *vp;
-
- if (bp->b_vp == (struct vnode *) 0)
- panic("brelvp: NULL");
- /*
- * Delete from old vnode list, if on one.
- */
- if (bp->b_blockb) {
- if (bq = bp->b_blockf)
- bq->b_blockb = bp->b_blockb;
- *bp->b_blockb = bq;
- bp->b_blockf = NULL;
- bp->b_blockb = NULL;
- }
- vp = bp->b_vp;
- bp->b_vp = (struct vnode *) 0;
- HOLDRELE(vp);
-}
-
-/*
- * Reassign a buffer from one vnode to another.
- * Used to assign file specific control information
- * (indirect blocks) to the vnode to which they belong.
- */
-reassignbuf(bp, newvp)
- register struct buf *bp;
- register struct vnode *newvp;
-{
- register struct buf *bq, **listheadp;
-
- if (newvp == NULL)
- panic("reassignbuf: NULL");
- /*
- * Delete from old vnode list, if on one.
- */
- if (bp->b_blockb) {
- if (bq = bp->b_blockf)
- bq->b_blockb = bp->b_blockb;
- *bp->b_blockb = bq;
- }
- /*
- * If dirty, put on list of dirty buffers;
- * otherwise insert onto list of clean buffers.
- */
- if (bp->b_flags & B_DELWRI)
- listheadp = &newvp->v_dirtyblkhd;
- else
- listheadp = &newvp->v_cleanblkhd;
- if (*listheadp) {
- bp->b_blockf = *listheadp;
- bp->b_blockb = listheadp;
- bp->b_blockf->b_blockb = &bp->b_blockf;
- *listheadp = bp;
- } else {
- *listheadp = bp;
- bp->b_blockb = listheadp;
- bp->b_blockf = NULL;