MCPcopy Create free account
hub / github.com/F-Stack/f-stack / vnode_destroy_vobject

Function vnode_destroy_vobject

freebsd/vm/vnode_pager.c:190–229  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

188}
189
190void
191vnode_destroy_vobject(struct vnode *vp)
192{
193 struct vm_object *obj;
194
195 obj = vp->v_object;
196 if (obj == NULL || obj->handle != vp)
197 return;
198 ASSERT_VOP_ELOCKED(vp, "vnode_destroy_vobject");
199 VM_OBJECT_WLOCK(obj);
200 MPASS(obj->type == OBJT_VNODE);
201 umtx_shm_object_terminated(obj);
202 if (obj->ref_count == 0) {
203 KASSERT((obj->flags & OBJ_DEAD) == 0,
204 ("vnode_destroy_vobject: Terminating dead object"));
205 vm_object_set_flag(obj, OBJ_DEAD);
206
207 /*
208 * Clean pages and flush buffers.
209 */
210 vm_object_page_clean(obj, 0, 0, OBJPC_SYNC);
211 VM_OBJECT_WUNLOCK(obj);
212
213 vinvalbuf(vp, V_SAVE, 0, 0);
214
215 BO_LOCK(&vp->v_bufobj);
216 vp->v_bufobj.bo_flag |= BO_DEAD;
217 BO_UNLOCK(&vp->v_bufobj);
218
219 VM_OBJECT_WLOCK(obj);
220 vm_object_terminate(obj);
221 } else {
222 /*
223 * Woe to the process that tries to page now :-).
224 */
225 vm_pager_deallocate(obj);
226 VM_OBJECT_WUNLOCK(obj);
227 }
228 KASSERT(vp->v_object == NULL, ("vp %p obj %p", vp, vp->v_object));
229}
230
231/*
232 * Allocate (or lookup) pager for a vnode.

Callers 2

zfs_freebsd_reclaimFunction · 0.85
vgonelFunction · 0.85

Calls 6

vm_object_set_flagFunction · 0.85
vm_object_page_cleanFunction · 0.85
vinvalbufFunction · 0.85
vm_object_terminateFunction · 0.85
vm_pager_deallocateFunction · 0.85

Tested by

no test coverage detected