diff options
author | jeff <jeff@FreeBSD.org> | 2005-03-28 11:18:47 +0000 |
---|---|---|
committer | jeff <jeff@FreeBSD.org> | 2005-03-28 11:18:47 +0000 |
commit | 8c749eb801f645d30dfa06ba195c308a01dd541d (patch) | |
tree | 8ab2c5e12f49a8d85b61a3adc055a5381979a91b /sys/kern | |
parent | 7743cc27d9c0cf37f7827da8f37a97989be7b9a9 (diff) | |
download | FreeBSD-src-8c749eb801f645d30dfa06ba195c308a01dd541d.zip FreeBSD-src-8c749eb801f645d30dfa06ba195c308a01dd541d.tar.gz |
- Move code that should probably be an assert above the main body of
vrele so that we can decrease the indentation of the real work and
make things slightly more clear.
Sponsored by: Isilon Systems, Inc.
Diffstat (limited to 'sys/kern')
-rw-r--r-- | sys/kern/vfs_subr.c | 29 |
1 files changed, 14 insertions, 15 deletions
diff --git a/sys/kern/vfs_subr.c b/sys/kern/vfs_subr.c index c9016d1..c10842a 100644 --- a/sys/kern/vfs_subr.c +++ b/sys/kern/vfs_subr.c @@ -1908,6 +1908,7 @@ vput(vp) struct thread *td = curthread; /* XXX */ KASSERT(vp != NULL, ("vput: null vp")); + ASSERT_VOP_LOCKED(vp, "vput"); VI_LOCK(vp); /* Skip this v_writecount check if we're going to panic below. */ VNASSERT(vp->v_writecount < vp->v_usecount || vp->v_usecount < 1, vp, @@ -1920,26 +1921,24 @@ vput(vp) return; } - if (vp->v_usecount == 1) { - v_incr_usecount(vp, -1); - if (VOP_ISLOCKED(vp, td) != LK_EXCLUSIVE && - VOP_LOCK(vp, LK_EXCLUPGRADE, td) != 0) - vp->v_iflag |= VI_OWEINACT; - else - vinactive(vp, td); - VOP_UNLOCK(vp, 0, td); - if (VSHOULDFREE(vp)) - vfree(vp); - else - vlruvp(vp); - VI_UNLOCK(vp); - - } else { + if (vp->v_usecount != 1) { #ifdef DIAGNOSTIC vprint("vput: negative ref count", vp); #endif panic("vput: negative ref cnt"); } + v_incr_usecount(vp, -1); + if (VOP_ISLOCKED(vp, td) != LK_EXCLUSIVE && + VOP_LOCK(vp, LK_EXCLUPGRADE, td) != 0) + vp->v_iflag |= VI_OWEINACT; + else + vinactive(vp, td); + VOP_UNLOCK(vp, 0, td); + if (VSHOULDFREE(vp)) + vfree(vp); + else + vlruvp(vp); + VI_UNLOCK(vp); } /* |