diff options
author | Konstantin Belousov <kib@FreeBSD.org> | 2019-08-25 13:26:06 +0000 |
---|---|---|
committer | Konstantin Belousov <kib@FreeBSD.org> | 2019-08-25 13:26:06 +0000 |
commit | 783a68aa336ca538534bbe520335a94f921d0e45 (patch) | |
tree | 92f988a9b5a25d521fefd79f98266e99494677a0 /sys/vm/vnode_pager.c | |
parent | 4e8671dd78cc77b31c598e83354fa6722acd4e3f (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.c | 15 |
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 { /* |