Print this page
Spencer's first if/else try
*** 841,875 ****
* on a vnode.
*/
void
vn_rele(vnode_t *vp)
{
- VERIFY(vp->v_count > 0);
mutex_enter(&vp->v_lock);
if (vp->v_count == 1) {
mutex_exit(&vp->v_lock);
VOP_INACTIVE(vp, CRED(), NULL);
return;
}
VN_RELE_LOCKED(vp);
mutex_exit(&vp->v_lock);
}
void
vn_phantom_rele(vnode_t *vp)
{
- VERIFY(vp->v_count > 0);
-
mutex_enter(&vp->v_lock);
! VERIFY3U(vp->v_count, >=, vp->v_phantom_count);
vp->v_phantom_count--;
DTRACE_PROBE1(vn__phantom_rele, vnode_t *, vp);
if (vp->v_count == 1) {
ASSERT0(vp->v_phantom_count);
mutex_exit(&vp->v_lock);
VOP_INACTIVE(vp, CRED(), NULL);
return;
}
VN_RELE_LOCKED(vp);
mutex_exit(&vp->v_lock);
}
--- 841,878 ----
* on a vnode.
*/
void
vn_rele(vnode_t *vp)
{
mutex_enter(&vp->v_lock);
if (vp->v_count == 1) {
mutex_exit(&vp->v_lock);
VOP_INACTIVE(vp, CRED(), NULL);
return;
}
+ else{
+ VERIFY(vp->v_count > 0);
+ }
VN_RELE_LOCKED(vp);
mutex_exit(&vp->v_lock);
}
void
vn_phantom_rele(vnode_t *vp)
{
mutex_enter(&vp->v_lock);
!
vp->v_phantom_count--;
DTRACE_PROBE1(vn__phantom_rele, vnode_t *, vp);
if (vp->v_count == 1) {
ASSERT0(vp->v_phantom_count);
mutex_exit(&vp->v_lock);
VOP_INACTIVE(vp, CRED(), NULL);
return;
+ }else{
+ VERIFY(vp->v_count > 0);
+ VERIFY3U(vp->v_count, >=, vp->v_phantom_count);
}
VN_RELE_LOCKED(vp);
mutex_exit(&vp->v_lock);
}
*** 892,910 ****
* only by the DNLC.
*/
void
vn_rele_dnlc(vnode_t *vp)
{
- VERIFY((vp->v_count > 0) && (vp->v_count_dnlc > 0));
mutex_enter(&vp->v_lock);
if (--vp->v_count_dnlc == 0) {
if (vp->v_count == 1) {
mutex_exit(&vp->v_lock);
VOP_INACTIVE(vp, CRED(), NULL);
return;
}
VN_RELE_LOCKED(vp);
}
mutex_exit(&vp->v_lock);
}
/*
--- 895,915 ----
* only by the DNLC.
*/
void
vn_rele_dnlc(vnode_t *vp)
{
mutex_enter(&vp->v_lock);
+
if (--vp->v_count_dnlc == 0) {
if (vp->v_count == 1) {
mutex_exit(&vp->v_lock);
VOP_INACTIVE(vp, CRED(), NULL);
return;
}
VN_RELE_LOCKED(vp);
+ }else{
+ VERIFY((vp->v_count > 0) && (vp->v_count_dnlc > 0));
}
mutex_exit(&vp->v_lock);
}
/*
*** 915,932 ****
* path from accessing a stream head that is going away.
*/
void
vn_rele_stream(vnode_t *vp)
{
- VERIFY(vp->v_count > 0);
mutex_enter(&vp->v_lock);
vp->v_stream = NULL;
if (vp->v_count == 1) {
mutex_exit(&vp->v_lock);
VOP_INACTIVE(vp, CRED(), NULL);
return;
}
VN_RELE_LOCKED(vp);
mutex_exit(&vp->v_lock);
}
static void
--- 920,940 ----
* path from accessing a stream head that is going away.
*/
void
vn_rele_stream(vnode_t *vp)
{
mutex_enter(&vp->v_lock);
+
vp->v_stream = NULL;
if (vp->v_count == 1) {
mutex_exit(&vp->v_lock);
VOP_INACTIVE(vp, CRED(), NULL);
return;
}
+ else{
+ VERIFY(vp->v_count > 0);
+ }
VN_RELE_LOCKED(vp);
mutex_exit(&vp->v_lock);
}
static void
*** 946,963 ****
* This is because taskqs throttle back allocation if too many are created.
*/
void
vn_rele_async(vnode_t *vp, taskq_t *taskq)
{
- VERIFY(vp->v_count > 0);
mutex_enter(&vp->v_lock);
if (vp->v_count == 1) {
mutex_exit(&vp->v_lock);
VERIFY(taskq_dispatch(taskq, (task_func_t *)vn_rele_inactive,
vp, TQ_SLEEP) != TASKQID_INVALID);
return;
}
VN_RELE_LOCKED(vp);
mutex_exit(&vp->v_lock);
}
int
--- 954,973 ----
* This is because taskqs throttle back allocation if too many are created.
*/
void
vn_rele_async(vnode_t *vp, taskq_t *taskq)
{
mutex_enter(&vp->v_lock);
if (vp->v_count == 1) {
mutex_exit(&vp->v_lock);
VERIFY(taskq_dispatch(taskq, (task_func_t *)vn_rele_inactive,
vp, TQ_SLEEP) != TASKQID_INVALID);
return;
}
+ else{
+ VERIFY(vp->v_count > 0);
+ }
VN_RELE_LOCKED(vp);
mutex_exit(&vp->v_lock);
}
int