Example #1
0
/*
 * 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);
}
Example #2
0
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);
}