It has not been possible to recursively terminate a vnode object for some time

now.  Eliminate the dead code that supports it.

Approved by:	kib, markj
Differential Revision:	https://reviews.freebsd.org/D22908
This commit is contained in:
Jeff Roberson 2020-01-19 18:36:03 +00:00
parent 98087a066f
commit 9c83ff2d86

View File

@ -200,36 +200,24 @@ vnode_destroy_vobject(struct vnode *vp)
MPASS(obj->type == OBJT_VNODE); MPASS(obj->type == OBJT_VNODE);
umtx_shm_object_terminated(obj); umtx_shm_object_terminated(obj);
if (obj->ref_count == 0) { if (obj->ref_count == 0) {
KASSERT((obj->flags & OBJ_DEAD) == 0,
("vnode_destroy_vobject: Terminating dead object"));
vm_object_set_flag(obj, OBJ_DEAD);
/* /*
* don't double-terminate the object * Clean pages and flush buffers.
*/ */
if ((obj->flags & OBJ_DEAD) == 0) { vm_object_page_clean(obj, 0, 0, OBJPC_SYNC);
vm_object_set_flag(obj, OBJ_DEAD); VM_OBJECT_WUNLOCK(obj);
/* vinvalbuf(vp, V_SAVE, 0, 0);
* Clean pages and flush buffers.
*/
vm_object_page_clean(obj, 0, 0, OBJPC_SYNC);
VM_OBJECT_WUNLOCK(obj);
vinvalbuf(vp, V_SAVE, 0, 0); BO_LOCK(&vp->v_bufobj);
vp->v_bufobj.bo_flag |= BO_DEAD;
BO_UNLOCK(&vp->v_bufobj);
BO_LOCK(&vp->v_bufobj); VM_OBJECT_WLOCK(obj);
vp->v_bufobj.bo_flag |= BO_DEAD; vm_object_terminate(obj);
BO_UNLOCK(&vp->v_bufobj);
VM_OBJECT_WLOCK(obj);
vm_object_terminate(obj);
} else {
/*
* Waiters were already handled during object
* termination. The exclusive vnode lock hopefully
* prevented new waiters from referencing the dying
* object.
*/
vp->v_object = NULL;
VM_OBJECT_WUNLOCK(obj);
}
} else { } else {
/* /*
* Woe to the process that tries to page now :-). * Woe to the process that tries to page now :-).