Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 19 Sep 2017 16:46:37 +0000 (UTC)
From:      Konstantin Belousov <kib@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r323768 - in head/sys: kern vm
Message-ID:  <201709191646.v8JGkbIF044431@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
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);



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201709191646.v8JGkbIF044431>