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