svn commit: r323768 - in head/sys: kern vm

Konstantin Belousov kib at FreeBSD.org
Tue Sep 19 16:46:38 UTC 2017


Author: kib
Date: Tue Sep 19 16:46:37 2017
New Revision: 323768
URL: https://svnweb.freebsd.org/changeset/base/323768

Log:
  For unlinked files, do not msync(2) or sync on the vnode deactivation.
  
  One consequence of the patch is that msyncing unlinked file mappings
  no longer reduces the amount of the dirty memory in the system, but I
  do not think that there are users of msync(2) that utilize it for such
  side-effect.
  
  Reported and tested by:	tjil
  PR:	222356
  Reviewed by:	alc
  Sponsored by:	The FreeBSD Foundation
  MFC after:	2 weeks
  Differential revision:	https://reviews.freebsd.org/D12411

Modified:
  head/sys/kern/vfs_subr.c
  head/sys/vm/vm_object.c

Modified: head/sys/kern/vfs_subr.c
==============================================================================
--- head/sys/kern/vfs_subr.c	Tue Sep 19 16:38:54 2017	(r323767)
+++ head/sys/kern/vfs_subr.c	Tue Sep 19 16:46:37 2017	(r323768)
@@ -3054,8 +3054,8 @@ vinactive(struct vnode *vp, struct thread *td)
 	 * point that VOP_INACTIVE() is called, there could still be
 	 * pending I/O and dirty pages in the object.
 	 */
-	obj = vp->v_object;
-	if (obj != NULL && (obj->flags & OBJ_MIGHTBEDIRTY) != 0) {
+	if ((obj = vp->v_object) != NULL && (vp->v_vflag & VV_NOSYNC) == 0 &&
+	    (obj->flags & OBJ_MIGHTBEDIRTY) != 0) {
 		VM_OBJECT_WLOCK(obj);
 		vm_object_page_clean(obj, 0, 0, 0);
 		VM_OBJECT_WUNLOCK(obj);

Modified: head/sys/vm/vm_object.c
==============================================================================
--- head/sys/vm/vm_object.c	Tue Sep 19 16:38:54 2017	(r323767)
+++ head/sys/vm/vm_object.c	Tue Sep 19 16:46:37 2017	(r323768)
@@ -1083,8 +1083,8 @@ vm_object_sync(vm_object_t object, vm_ooffset_t offset
 	 * I/O.
 	 */
 	if (object->type == OBJT_VNODE &&
-	    (object->flags & OBJ_MIGHTBEDIRTY) != 0) {
-		vp = object->handle;
+	    (object->flags & OBJ_MIGHTBEDIRTY) != 0 &&
+	    ((vp = object->handle)->v_vflag & VV_NOSYNC) == 0) {
 		VM_OBJECT_WUNLOCK(object);
 		(void) vn_start_write(vp, &mp, V_WAIT);
 		vn_lock(vp, LK_EXCLUSIVE | LK_RETRY);


More information about the svn-src-all mailing list