| 3590 | } |
| 3591 | |
| 3592 | void |
| 3593 | vdropl(struct vnode *vp) |
| 3594 | { |
| 3595 | |
| 3596 | ASSERT_VI_LOCKED(vp, __func__); |
| 3597 | CTR2(KTR_VFS, "%s: vp %p", __func__, vp); |
| 3598 | if (!refcount_release(&vp->v_holdcnt)) { |
| 3599 | VI_UNLOCK(vp); |
| 3600 | return; |
| 3601 | } |
| 3602 | if (!VN_IS_DOOMED(vp)) { |
| 3603 | vn_freevnodes_inc(); |
| 3604 | vdrop_deactivate(vp); |
| 3605 | /* |
| 3606 | * Also unlocks the interlock. We can't assert on it as we |
| 3607 | * released our hold and by now the vnode might have been |
| 3608 | * freed. |
| 3609 | */ |
| 3610 | return; |
| 3611 | } |
| 3612 | vdropl_final(vp); |
| 3613 | } |
| 3614 | |
| 3615 | /* |
| 3616 | * Call VOP_INACTIVE on the vnode and manage the DOINGINACT and OWEINACT |
no test coverage detected