- for (flist = bfreelist; flist < &bfreelist[BQ_EMPTY]; flist++)
- for (bp = flist->av_forw; bp != flist; bp = bp->av_forw) {
- if ((bp->b_flags & B_DELWRI) == 0)
- continue;
- if (dev == NODEV || dev == bp->b_dev) {
- notavail(bp);
- (void) bawrite(bp);
- splx(s);
- goto loop;
- }
- }
- splx(s);
-}
-
-#ifdef unused
-/*
- * Invalidate blocks associated with vp which are on the freelist.
- * Make sure all write-behind blocks associated with vp are flushed out.
- */
-binvalfree(vp)
- struct vnode *vp;
-{
- register struct buf *bp;
- register struct buf *flist;
- int s;
-
-loop:
- s = splbio();
- for (flist = bfreelist; flist < &bfreelist[BQ_EMPTY]; flist++)
- for (bp = flist->av_forw; bp != flist; bp = bp->av_forw) {
- if (vp == (struct vnode *) 0 || vp == bp->b_vp) {
- if (bp->b_flags & B_DELWRI) {
+ for (flist = bfreelist; flist < &bfreelist[BQ_EMPTY]; flist++) {
+ for (bp = flist->av_forw; bp != flist; bp = bp->av_forw) {
+ if ((bp->b_flags & B_BUSY))
+ continue;
+ if ((bp->b_flags & B_DELWRI) == 0)
+ continue;
+ if (bp->b_vp && bp->b_vp->v_mount == mountp) {