/* * Free a marker vnode. */ void vnfree_marker(vnode_t *vp) { vnode_impl_t *node; node = VNODE_TO_VIMPL(vp); KASSERT(node->vi_state == VS_MARKER); uvm_obj_destroy(&vp->v_uobj, true); pool_cache_put(vcache.pool, node); }
void drm_gem_object_release(struct drm_gem_object *obj) { #ifdef __NetBSD__ if (obj->gemo_shm_uao) uao_detach(obj->gemo_shm_uao); uvm_obj_destroy(&obj->gemo_uvmobj, true); #else if (obj->filp) fput(obj->filp); #endif }
/* * Free an unused, unreferenced vnode. */ void vnfree(vnode_t *vp) { KASSERT(vp->v_usecount == 0); if ((vp->v_iflag & VI_MARKER) == 0) { rw_destroy(&vp->v_lock); mutex_enter(&vnode_free_list_lock); numvnodes--; mutex_exit(&vnode_free_list_lock); } /* * Note: the vnode interlock will either be freed, of reference * dropped (if VI_LOCKSHARE was in use). */ uvm_obj_destroy(&vp->v_uobj, true); cv_destroy(&vp->v_cv); pool_cache_put(vnode_cache, vp); }