aboutsummaryrefslogtreecommitdiff
path: root/sys/vm/vnode_pager.c
diff options
context:
space:
mode:
authorKonstantin Belousov <kib@FreeBSD.org>2019-08-25 13:26:06 +0000
committerKonstantin Belousov <kib@FreeBSD.org>2019-08-25 13:26:06 +0000
commit783a68aa336ca538534bbe520335a94f921d0e45 (patch)
tree92f988a9b5a25d521fefd79f98266e99494677a0 /sys/vm/vnode_pager.c
parent4e8671dd78cc77b31c598e83354fa6722acd4e3f (diff)
Move OBJT_VNODE specific code from vm_object_terminate() to
vnode_destroy_vobject(). Reviewed by: alc, jeff (previous version), markj Tested by: pho Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D21357
Notes
Notes: svn path=/head/; revision=351478
Diffstat (limited to 'sys/vm/vnode_pager.c')
-rw-r--r--sys/vm/vnode_pager.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/sys/vm/vnode_pager.c b/sys/vm/vnode_pager.c
index 70c919d9134e..ed286e0024cd 100644
--- a/sys/vm/vnode_pager.c
+++ b/sys/vm/vnode_pager.c
@@ -200,6 +200,21 @@ vnode_destroy_vobject(struct vnode *vp)
* don't double-terminate the object
*/
if ((obj->flags & OBJ_DEAD) == 0) {
+ vm_object_set_flag(obj, OBJ_DEAD);
+
+ /*
+ * 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);
+
+ VM_OBJECT_WLOCK(obj);
vm_object_terminate(obj);
} else {
/*