diff options
author | phk <phk@FreeBSD.org> | 2004-10-25 09:14:03 +0000 |
---|---|---|
committer | phk <phk@FreeBSD.org> | 2004-10-25 09:14:03 +0000 |
commit | 0e87ab8bc6e542c845f82c2bb526208587b200ad (patch) | |
tree | 200ff5f062ab8c134c56e5c8d6bd7fb2f35f6bad /sys/kern/vfs_subr.c | |
parent | 100e94e682f93c8aeae0f6683f1adab50f67b1f7 (diff) | |
download | FreeBSD-src-0e87ab8bc6e542c845f82c2bb526208587b200ad.zip FreeBSD-src-0e87ab8bc6e542c845f82c2bb526208587b200ad.tar.gz |
Loose the v_dirty* and v_clean* alias macros.
Check the count field where we just want to know the full/empty state,
rather than using TAILQ_EMPTY() or TAILQ_FIRST().
Diffstat (limited to 'sys/kern/vfs_subr.c')
-rw-r--r-- | sys/kern/vfs_subr.c | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/sys/kern/vfs_subr.c b/sys/kern/vfs_subr.c index e3dcaf9..a233c5a 100644 --- a/sys/kern/vfs_subr.c +++ b/sys/kern/vfs_subr.c @@ -952,13 +952,15 @@ vinvalbuf(vp, flags, cred, td, slpflag, slptimeo) * no race conditions occur from this. */ for (error = 0;;) { - if ((blist = TAILQ_FIRST(&vp->v_cleanblkhd)) != 0 && + blist = TAILQ_FIRST(&vp->v_bufobj.bo_clean.bv_hd); + if (blist != NULL && flushbuflist(blist, flags, vp, slpflag, slptimeo, &error)) { if (error) break; continue; } - if ((blist = TAILQ_FIRST(&vp->v_dirtyblkhd)) != 0 && + blist = TAILQ_FIRST(&vp->v_bufobj.bo_dirty.bv_hd); + if (blist != NULL && flushbuflist(blist, flags, vp, slpflag, slptimeo, &error)) { if (error) break; @@ -985,7 +987,7 @@ vinvalbuf(vp, flags, cred, td, slpflag, slptimeo) VM_OBJECT_UNLOCK(object); } VI_LOCK(vp); - } while (vp->v_numoutput > 0); + } while (bo->bo_numoutput > 0); VI_UNLOCK(vp); /* @@ -1001,8 +1003,8 @@ vinvalbuf(vp, flags, cred, td, slpflag, slptimeo) #ifdef INVARIANTS VI_LOCK(vp); if ((flags & (V_ALT | V_NORMAL)) == 0 && - (!TAILQ_EMPTY(&vp->v_dirtyblkhd) || - !TAILQ_EMPTY(&vp->v_cleanblkhd))) + (vp->v_bufobj.bo_dirty.bv_cnt > 0 || + vp->v_bufobj.bo_clean.bv_cnt > 0)) panic("vinvalbuf: flush failed"); VI_UNLOCK(vp); #endif @@ -1398,7 +1400,7 @@ brelvp(struct buf *bp) bo = bp->b_bufobj; if (bp->b_xflags & (BX_VNDIRTY | BX_VNCLEAN)) buf_vlist_remove(bp); - if ((vp->v_iflag & VI_ONWORKLST) && TAILQ_EMPTY(&vp->v_dirtyblkhd)) { + if ((vp->v_iflag & VI_ONWORKLST) && bo->bo_dirty.bv_cnt == 0) { vp->v_iflag &= ~VI_ONWORKLST; mtx_lock(&sync_mtx); LIST_REMOVE(vp, v_synclist); |