Author: kib
Date: Wed Jan 25 20:54:09 2012
New Revision: 230553
URL: http://svn.freebsd.org/changeset/base/230553

Log:
  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.
  
  Reviewed by:  alc, tegge (long time ago)
  Tested by:    pho
  MFC after:    2 weeks

Modified:
  head/sys/kern/vfs_subr.c

Modified: head/sys/kern/vfs_subr.c
==============================================================================
--- head/sys/kern/vfs_subr.c    Wed Jan 25 20:48:20 2012        (r230552)
+++ head/sys/kern/vfs_subr.c    Wed Jan 25 20:54:09 2012        (r230553)
@@ -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);
 
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to