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
This commit is contained in:
parent
6f4618881e
commit
cc993a6b75
@ -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);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user