summaryrefslogtreecommitdiffstats
path: root/sys/kern
diff options
context:
space:
mode:
authorjeff <jeff@FreeBSD.org>2005-03-28 11:18:47 +0000
committerjeff <jeff@FreeBSD.org>2005-03-28 11:18:47 +0000
commit8c749eb801f645d30dfa06ba195c308a01dd541d (patch)
tree8ab2c5e12f49a8d85b61a3adc055a5381979a91b /sys/kern
parent7743cc27d9c0cf37f7827da8f37a97989be7b9a9 (diff)
downloadFreeBSD-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.c29
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);
}
/*
OpenPOWER on IntegriCloud