mirror of
https://github.com/freebsd/freebsd-src
synced 2024-09-23 02:04:46 +00:00
The last argument to vm_object_page_clean() are now bit flags, rather than
the old true/false. While here, have vfs_msync() only call vm_object_page_clean() with OBJPC_SYNC if called with MNT_WAIT flags. vfs_msync() is called at unmount time (with MNT_WAIT) and from the syncer process (formerly update). This should make dirty mmap writebacks a little less nasty. I have tested this a little with SOFTUPDATES enabled, but I don't normally use it since I've been badly burned too many times.
This commit is contained in:
parent
255e0e14be
commit
b421db370b
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=40777
|
@ -36,7 +36,7 @@
|
||||||
* SUCH DAMAGE.
|
* SUCH DAMAGE.
|
||||||
*
|
*
|
||||||
* @(#)vfs_subr.c 8.31 (Berkeley) 5/26/95
|
* @(#)vfs_subr.c 8.31 (Berkeley) 5/26/95
|
||||||
* $Id: vfs_subr.c,v 1.170 1998/10/29 09:51:27 peter Exp $
|
* $Id: vfs_subr.c,v 1.171 1998/10/29 11:50:32 bde Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -2467,7 +2467,7 @@ vfs_msync(struct mount *mp, int flags) {
|
||||||
if (!vget(vp,
|
if (!vget(vp,
|
||||||
LK_INTERLOCK | LK_EXCLUSIVE | LK_RETRY | LK_NOOBJ, curproc)) {
|
LK_INTERLOCK | LK_EXCLUSIVE | LK_RETRY | LK_NOOBJ, curproc)) {
|
||||||
if (vp->v_object) {
|
if (vp->v_object) {
|
||||||
vm_object_page_clean(vp->v_object, 0, 0, TRUE);
|
vm_object_page_clean(vp->v_object, 0, 0, flags == MNT_WAIT ? OBJPC_SYNC : 0);
|
||||||
anyio = 1;
|
anyio = 1;
|
||||||
}
|
}
|
||||||
vput(vp);
|
vput(vp);
|
||||||
|
|
|
@ -36,7 +36,7 @@
|
||||||
* SUCH DAMAGE.
|
* SUCH DAMAGE.
|
||||||
*
|
*
|
||||||
* @(#)vfs_syscalls.c 8.13 (Berkeley) 4/15/94
|
* @(#)vfs_syscalls.c 8.13 (Berkeley) 4/15/94
|
||||||
* $Id: vfs_syscalls.c,v 1.106 1998/09/10 02:27:52 tegge Exp $
|
* $Id: vfs_syscalls.c,v 1.107 1998/09/24 15:02:46 luoqi Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* For 4.3 integer FS ID compatibility */
|
/* For 4.3 integer FS ID compatibility */
|
||||||
|
@ -2410,7 +2410,7 @@ fsync(p, uap)
|
||||||
vp = (struct vnode *)fp->f_data;
|
vp = (struct vnode *)fp->f_data;
|
||||||
vn_lock(vp, LK_EXCLUSIVE | LK_RETRY, p);
|
vn_lock(vp, LK_EXCLUSIVE | LK_RETRY, p);
|
||||||
if (vp->v_object)
|
if (vp->v_object)
|
||||||
vm_object_page_clean(vp->v_object, 0, 0, FALSE);
|
vm_object_page_clean(vp->v_object, 0, 0, 0);
|
||||||
if ((error = VOP_FSYNC(vp, fp->f_cred, MNT_WAIT, p)) == 0 &&
|
if ((error = VOP_FSYNC(vp, fp->f_cred, MNT_WAIT, p)) == 0 &&
|
||||||
vp->v_mount && (vp->v_mount->mnt_flag & MNT_SOFTDEP) &&
|
vp->v_mount && (vp->v_mount->mnt_flag & MNT_SOFTDEP) &&
|
||||||
bioops.io_fsync)
|
bioops.io_fsync)
|
||||||
|
|
|
@ -36,7 +36,7 @@
|
||||||
* SUCH DAMAGE.
|
* SUCH DAMAGE.
|
||||||
*
|
*
|
||||||
* @(#)vfs_subr.c 8.31 (Berkeley) 5/26/95
|
* @(#)vfs_subr.c 8.31 (Berkeley) 5/26/95
|
||||||
* $Id: vfs_subr.c,v 1.170 1998/10/29 09:51:27 peter Exp $
|
* $Id: vfs_subr.c,v 1.171 1998/10/29 11:50:32 bde Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -2467,7 +2467,7 @@ vfs_msync(struct mount *mp, int flags) {
|
||||||
if (!vget(vp,
|
if (!vget(vp,
|
||||||
LK_INTERLOCK | LK_EXCLUSIVE | LK_RETRY | LK_NOOBJ, curproc)) {
|
LK_INTERLOCK | LK_EXCLUSIVE | LK_RETRY | LK_NOOBJ, curproc)) {
|
||||||
if (vp->v_object) {
|
if (vp->v_object) {
|
||||||
vm_object_page_clean(vp->v_object, 0, 0, TRUE);
|
vm_object_page_clean(vp->v_object, 0, 0, flags == MNT_WAIT ? OBJPC_SYNC : 0);
|
||||||
anyio = 1;
|
anyio = 1;
|
||||||
}
|
}
|
||||||
vput(vp);
|
vput(vp);
|
||||||
|
|
|
@ -36,7 +36,7 @@
|
||||||
* SUCH DAMAGE.
|
* SUCH DAMAGE.
|
||||||
*
|
*
|
||||||
* @(#)vfs_syscalls.c 8.13 (Berkeley) 4/15/94
|
* @(#)vfs_syscalls.c 8.13 (Berkeley) 4/15/94
|
||||||
* $Id: vfs_syscalls.c,v 1.106 1998/09/10 02:27:52 tegge Exp $
|
* $Id: vfs_syscalls.c,v 1.107 1998/09/24 15:02:46 luoqi Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* For 4.3 integer FS ID compatibility */
|
/* For 4.3 integer FS ID compatibility */
|
||||||
|
@ -2410,7 +2410,7 @@ fsync(p, uap)
|
||||||
vp = (struct vnode *)fp->f_data;
|
vp = (struct vnode *)fp->f_data;
|
||||||
vn_lock(vp, LK_EXCLUSIVE | LK_RETRY, p);
|
vn_lock(vp, LK_EXCLUSIVE | LK_RETRY, p);
|
||||||
if (vp->v_object)
|
if (vp->v_object)
|
||||||
vm_object_page_clean(vp->v_object, 0, 0, FALSE);
|
vm_object_page_clean(vp->v_object, 0, 0, 0);
|
||||||
if ((error = VOP_FSYNC(vp, fp->f_cred, MNT_WAIT, p)) == 0 &&
|
if ((error = VOP_FSYNC(vp, fp->f_cred, MNT_WAIT, p)) == 0 &&
|
||||||
vp->v_mount && (vp->v_mount->mnt_flag & MNT_SOFTDEP) &&
|
vp->v_mount && (vp->v_mount->mnt_flag & MNT_SOFTDEP) &&
|
||||||
bioops.io_fsync)
|
bioops.io_fsync)
|
||||||
|
|
Loading…
Reference in a new issue