svn commit: r230553 - head/sys/kern
Konstantin Belousov
kib at FreeBSD.org
Wed Jan 25 20:54:10 UTC 2012
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);
More information about the svn-src-all
mailing list