Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 8 Feb 2012 14:09:09 +0000 (UTC)
From:      Konstantin Belousov <kib@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-9@freebsd.org
Subject:   svn commit: r231202 - stable/9/sys/kern
Message-ID:  <201202081409.q18E99T6046011@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: kib
Date: Wed Feb  8 14:09:08 2012
New Revision: 231202
URL: http://svn.freebsd.org/changeset/base/231202

Log:
  MFC r230553:
  When doing vflush(WRITECLOSE), clean vnode pages.
  
  Unmounts do vfs_msync() before calling VFS_UNMOUNT(), but there is
  still a race allowing a process to dirty pages after msync
  finished. Remounts rw->ro just left dirty pages in system.

Modified:
  stable/9/sys/kern/vfs_subr.c
Directory Properties:
  stable/9/sys/   (props changed)

Modified: stable/9/sys/kern/vfs_subr.c
==============================================================================
--- stable/9/sys/kern/vfs_subr.c	Wed Feb  8 13:39:38 2012	(r231201)
+++ stable/9/sys/kern/vfs_subr.c	Wed Feb  8 14:09:08 2012	(r231202)
@@ -2496,6 +2496,18 @@ loop:
 		 * vnodes open for writing.
 		 */
 		if (flags & WRITECLOSE) {
+			if (vp->v_object != NULL) {
+				VM_OBJECT_LOCK(vp->v_object);
+				vm_object_page_clean(vp->v_object, 0, 0, 0);
+				VM_OBJECT_UNLOCK(vp->v_object);
+			}
+			error = VOP_FSYNC(vp, MNT_WAIT, td);
+			if (error != 0) {
+				VOP_UNLOCK(vp, 0);
+				vdrop(vp);
+				MNT_VNODE_FOREACH_ABORT(mp, mvp);
+				return (error);
+			}
 			error = VOP_GETATTR(vp, &vattr, td->td_ucred);
 			VI_LOCK(vp);
 



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