Module Name:    src
Committed By:   riz
Date:           Mon May  7 03:01:14 UTC 2012

Modified Files:
        src/sys/fs/msdosfs [netbsd-6]: msdosfs_vnops.c
        src/sys/fs/ntfs [netbsd-6]: ntfs_vnops.c
        src/sys/fs/sysvbfs [netbsd-6]: sysvbfs_vnops.c
        src/sys/fs/udf [netbsd-6]: udf_subr.c udf_vnops.c
        src/sys/fs/v7fs [netbsd-6]: v7fs_vnops.c
        src/sys/kern [netbsd-6]: vfs_subr.c vfs_wapbl.c
        src/sys/miscfs/genfs [netbsd-6]: genfs_io.c
        src/sys/miscfs/specfs [netbsd-6]: spec_vnops.c
        src/sys/ufs/chfs [netbsd-6]: chfs_vnops.c
        src/sys/ufs/ext2fs [netbsd-6]: ext2fs_readwrite.c ext2fs_vnops.c
        src/sys/ufs/ffs [netbsd-6]: ffs_vfsops.c ffs_vnops.c
        src/sys/ufs/ufs [netbsd-6]: ufs_readwrite.c
        src/sys/uvm [netbsd-6]: uvm_pager.h

Log Message:
Pull up following revision(s) (requested by chs in ticket #204):
        sys/fs/sysvbfs/sysvbfs_vnops.c: revision 1.44
        sys/ufs/ffs/ffs_vfsops.c: revision 1.277
        sys/fs/v7fs/v7fs_vnops.c: revision 1.11
        sys/ufs/chfs/chfs_vnops.c: revision 1.7
        sys/ufs/ext2fs/ext2fs_readwrite.c: revision 1.61
        sys/miscfs/genfs/genfs_io.c: revision 1.54
        sys/kern/vfs_wapbl.c: revision 1.52
        sys/uvm/uvm_pager.h: revision 1.43
        sys/ufs/ffs/ffs_vnops.c: revision 1.121
        sys/kern/vfs_subr.c: revision 1.434
        sys/fs/msdosfs/msdosfs_vnops.c: revision 1.83
        sys/fs/ntfs/ntfs_vnops.c: revision 1.51
        sys/fs/udf/udf_subr.c: revision 1.119
        sys/miscfs/specfs/spec_vnops.c: revision 1.135
        sys/ufs/ext2fs/ext2fs_vnops.c: revision 1.103
        sys/fs/udf/udf_vnops.c: revision 1.71
        sys/ufs/ufs/ufs_readwrite.c: revision 1.104
change vflushbuf() to take the full FSYNC_* flags.
translate FSYNC_LAZY into PGO_LAZY for VOP_PUTPAGES() so that
genfs_do_io() can set the appropriate io priority for the I/O.
this is the first part of addressing PR 46325.
mark all wapbl I/O as BPRIO_TIMECRITICAL.
this is the second part of addressing PR 46325.


To generate a diff of this commit:
cvs rdiff -u -r1.79.4.1 -r1.79.4.2 src/sys/fs/msdosfs/msdosfs_vnops.c
cvs rdiff -u -r1.49 -r1.49.10.1 src/sys/fs/ntfs/ntfs_vnops.c
cvs rdiff -u -r1.40 -r1.40.2.1 src/sys/fs/sysvbfs/sysvbfs_vnops.c
cvs rdiff -u -r1.118 -r1.118.6.1 src/sys/fs/udf/udf_subr.c
cvs rdiff -u -r1.69 -r1.69.6.1 src/sys/fs/udf/udf_vnops.c
cvs rdiff -u -r1.7 -r1.7.2.1 src/sys/fs/v7fs/v7fs_vnops.c
cvs rdiff -u -r1.432 -r1.432.2.1 src/sys/kern/vfs_subr.c
cvs rdiff -u -r1.51 -r1.51.2.1 src/sys/kern/vfs_wapbl.c
cvs rdiff -u -r1.53 -r1.53.8.1 src/sys/miscfs/genfs/genfs_io.c
cvs rdiff -u -r1.134 -r1.134.8.1 src/sys/miscfs/specfs/spec_vnops.c
cvs rdiff -u -r1.2 -r1.2.4.1 src/sys/ufs/chfs/chfs_vnops.c
cvs rdiff -u -r1.58 -r1.58.6.1 src/sys/ufs/ext2fs/ext2fs_readwrite.c
cvs rdiff -u -r1.101 -r1.101.6.1 src/sys/ufs/ext2fs/ext2fs_vnops.c
cvs rdiff -u -r1.275 -r1.275.2.1 src/sys/ufs/ffs/ffs_vfsops.c
cvs rdiff -u -r1.120 -r1.120.8.1 src/sys/ufs/ffs/ffs_vnops.c
cvs rdiff -u -r1.101 -r1.101.2.1 src/sys/ufs/ufs/ufs_readwrite.c
cvs rdiff -u -r1.42 -r1.42.8.1 src/sys/uvm/uvm_pager.h

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/fs/msdosfs/msdosfs_vnops.c
diff -u src/sys/fs/msdosfs/msdosfs_vnops.c:1.79.4.1 src/sys/fs/msdosfs/msdosfs_vnops.c:1.79.4.2
--- src/sys/fs/msdosfs/msdosfs_vnops.c:1.79.4.1	Fri Apr  6 17:40:20 2012
+++ src/sys/fs/msdosfs/msdosfs_vnops.c	Mon May  7 03:01:13 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: msdosfs_vnops.c,v 1.79.4.1 2012/04/06 17:40:20 riz Exp $	*/
+/*	$NetBSD: msdosfs_vnops.c,v 1.79.4.2 2012/05/07 03:01:13 riz Exp $	*/
 
 /*-
  * Copyright (C) 1994, 1995, 1997 Wolfgang Solfrank.
@@ -48,7 +48,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: msdosfs_vnops.c,v 1.79.4.1 2012/04/06 17:40:20 riz Exp $");
+__KERNEL_RCSID(0, "$NetBSD: msdosfs_vnops.c,v 1.79.4.2 2012/05/07 03:01:13 riz Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -653,7 +653,8 @@ msdosfs_write(void *v)
 		if (!async && oldoff >> 16 != uio->uio_offset >> 16) {
 			mutex_enter(vp->v_interlock);
 			error = VOP_PUTPAGES(vp, (oldoff >> 16) << 16,
-			    (uio->uio_offset >> 16) << 16, PGO_CLEANIT);
+			    (uio->uio_offset >> 16) << 16,
+			    PGO_CLEANIT | PGO_LAZY);
 		}
 	} while (error == 0 && uio->uio_resid > 0);
 
@@ -1805,7 +1806,7 @@ msdosfs_fsync(void *v)
 
 	fstrans_start(vp->v_mount, FSTRANS_LAZY);
 	wait = (ap->a_flags & FSYNC_WAIT) != 0;
-	error = vflushbuf(vp, wait);
+	error = vflushbuf(vp, ap->a_flags);
 	if (error == 0 && (ap->a_flags & FSYNC_DATAONLY) == 0)
 		error = msdosfs_update(vp, NULL, NULL, wait ? UPDATE_WAIT : 0);
 

Index: src/sys/fs/ntfs/ntfs_vnops.c
diff -u src/sys/fs/ntfs/ntfs_vnops.c:1.49 src/sys/fs/ntfs/ntfs_vnops.c:1.49.10.1
--- src/sys/fs/ntfs/ntfs_vnops.c:1.49	Thu May 19 03:11:57 2011
+++ src/sys/fs/ntfs/ntfs_vnops.c	Mon May  7 03:01:13 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: ntfs_vnops.c,v 1.49 2011/05/19 03:11:57 rmind Exp $	*/
+/*	$NetBSD: ntfs_vnops.c,v 1.49.10.1 2012/05/07 03:01:13 riz Exp $	*/
 
 /*
  * Copyright (c) 1992, 1993
@@ -36,7 +36,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ntfs_vnops.c,v 1.49 2011/05/19 03:11:57 rmind Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ntfs_vnops.c,v 1.49.10.1 2012/05/07 03:01:13 riz Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -747,14 +747,12 @@ ntfs_fsync(void *v)
 		off_t offhi;
 	} */ *ap = v;
 	struct vnode *vp = ap->a_vp;
-	int wait;
 
 	if (ap->a_flags & FSYNC_CACHE) {
 		return EOPNOTSUPP;
 	}
 
-	wait = (ap->a_flags & FSYNC_WAIT) != 0;
-	return vflushbuf(vp, wait);
+	return vflushbuf(vp, ap->a_flags);
 }
 
 /*

Index: src/sys/fs/sysvbfs/sysvbfs_vnops.c
diff -u src/sys/fs/sysvbfs/sysvbfs_vnops.c:1.40 src/sys/fs/sysvbfs/sysvbfs_vnops.c:1.40.2.1
--- src/sys/fs/sysvbfs/sysvbfs_vnops.c:1.40	Fri Jan 27 21:46:42 2012
+++ src/sys/fs/sysvbfs/sysvbfs_vnops.c	Mon May  7 03:01:12 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: sysvbfs_vnops.c,v 1.40 2012/01/27 21:46:42 njoly Exp $	*/
+/*	$NetBSD: sysvbfs_vnops.c,v 1.40.2.1 2012/05/07 03:01:12 riz Exp $	*/
 
 /*-
  * Copyright (c) 2004 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: sysvbfs_vnops.c,v 1.40 2012/01/27 21:46:42 njoly Exp $");
+__KERNEL_RCSID(0, "$NetBSD: sysvbfs_vnops.c,v 1.40.2.1 2012/05/07 03:01:12 riz Exp $");
 
 #include <sys/param.h>
 #include <sys/kernel.h>
@@ -835,7 +835,7 @@ sysvbfs_fsync(void *v)
 	}
 
 	wait = (ap->a_flags & FSYNC_WAIT) != 0;
-	error = vflushbuf(vp, wait);
+	error = vflushbuf(vp, ap->a_flags);
 	if (error == 0 && (ap->a_flags & FSYNC_DATAONLY) == 0)
 		error = sysvbfs_update(vp, NULL, NULL, wait ? UPDATE_WAIT : 0);
 

Index: src/sys/fs/udf/udf_subr.c
diff -u src/sys/fs/udf/udf_subr.c:1.118 src/sys/fs/udf/udf_subr.c:1.118.6.1
--- src/sys/fs/udf/udf_subr.c:1.118	Sun Nov 13 23:08:47 2011
+++ src/sys/fs/udf/udf_subr.c	Mon May  7 03:01:14 2012
@@ -1,4 +1,4 @@
-/* $NetBSD: udf_subr.c,v 1.118 2011/11/13 23:08:47 christos Exp $ */
+/* $NetBSD: udf_subr.c,v 1.118.6.1 2012/05/07 03:01:14 riz Exp $ */
 
 /*
  * Copyright (c) 2006, 2008 Reinoud Zandijk
@@ -29,7 +29,7 @@
 
 #include <sys/cdefs.h>
 #ifndef lint
-__KERNEL_RCSID(0, "$NetBSD: udf_subr.c,v 1.118 2011/11/13 23:08:47 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: udf_subr.c,v 1.118.6.1 2012/05/07 03:01:14 riz Exp $");
 #endif /* not lint */
 
 
@@ -1830,7 +1830,7 @@ udf_write_metadata_partition_spacetable(
 			NULL, NULL);
 
 	bitmap_node->i_flags |= IN_MODIFIED;
-	error = vflushbuf(bitmap_node->vnode, 1 /* sync */);
+	error = vflushbuf(bitmap_node->vnode, FSYNC_WAIT);
 	if (error == 0)
 		error = VOP_FSYNC(bitmap_node->vnode,
 				FSCRED, FSYNC_WAIT, 0, 0);
@@ -2834,7 +2834,7 @@ udf_writeout_vat(struct udf_mount *ump)
 
 //	mutex_exit(&ump->allocate_mutex);
 
-	error = vflushbuf(ump->vat_node->vnode, 1 /* sync */);
+	error = vflushbuf(ump->vat_node->vnode, FSYNC_WAIT);
 	if (error)
 		goto out;
 	error = VOP_FSYNC(ump->vat_node->vnode,
@@ -3781,7 +3781,7 @@ udf_close_logvol(struct udf_mount *ump, 
 		/* write out the VAT data and all its descriptors */
 		DPRINTF(VOLUMES, ("writeout vat_node\n"));
 		udf_writeout_vat(ump);
-		(void) vflushbuf(ump->vat_node->vnode, 1 /* sync */);
+		(void) vflushbuf(ump->vat_node->vnode, FSYNC_WAIT);
 
 		(void) VOP_FSYNC(ump->vat_node->vnode,
 				FSCRED, FSYNC_WAIT, 0, 0);
@@ -6843,5 +6843,3 @@ out:
 }
 
 /* --------------------------------------------------------------------- */
-
-

Index: src/sys/fs/udf/udf_vnops.c
diff -u src/sys/fs/udf/udf_vnops.c:1.69 src/sys/fs/udf/udf_vnops.c:1.69.6.1
--- src/sys/fs/udf/udf_vnops.c:1.69	Fri Nov 18 21:18:51 2011
+++ src/sys/fs/udf/udf_vnops.c	Mon May  7 03:01:14 2012
@@ -1,4 +1,4 @@
-/* $NetBSD: udf_vnops.c,v 1.69 2011/11/18 21:18:51 christos Exp $ */
+/* $NetBSD: udf_vnops.c,v 1.69.6.1 2012/05/07 03:01:14 riz Exp $ */
 
 /*
  * Copyright (c) 2006, 2008 Reinoud Zandijk
@@ -32,7 +32,7 @@
 
 #include <sys/cdefs.h>
 #ifndef lint
-__KERNEL_RCSID(0, "$NetBSD: udf_vnops.c,v 1.69 2011/11/18 21:18:51 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: udf_vnops.c,v 1.69.6.1 2012/05/07 03:01:14 riz Exp $");
 #endif /* not lint */
 
 
@@ -368,7 +368,8 @@ udf_write(void *v)
 		  (old_offset >> 16 != uio->uio_offset >> 16)) {
 			mutex_enter(vp->v_interlock);
 			error = VOP_PUTPAGES(vp, (old_offset >> 16) << 16,
-			    (uio->uio_offset >> 16) << 16, PGO_CLEANIT);
+			    (uio->uio_offset >> 16) << 16,
+			    PGO_CLEANIT | PGO_LAZY);
 			old_offset = uio->uio_offset;
 		}
 	}
@@ -2224,7 +2225,7 @@ udf_fsync(void *v)
 
 	/* flush data and wait for it when requested */
 	wait = (ap->a_flags & FSYNC_WAIT) ? UPDATE_WAIT : 0;
-	error = vflushbuf(vp, wait);
+	error = vflushbuf(vp, ap->a_flags);
 	if (error)
 		return error;
 
@@ -2379,4 +2380,3 @@ const struct vnodeopv_entry_desc udf_vno
 const struct vnodeopv_desc udf_vnodeop_opv_desc = {
 	&udf_vnodeop_p, udf_vnodeop_entries
 };
-

Index: src/sys/fs/v7fs/v7fs_vnops.c
diff -u src/sys/fs/v7fs/v7fs_vnops.c:1.7 src/sys/fs/v7fs/v7fs_vnops.c:1.7.2.1
--- src/sys/fs/v7fs/v7fs_vnops.c:1.7	Fri Jan 27 12:22:02 2012
+++ src/sys/fs/v7fs/v7fs_vnops.c	Mon May  7 03:01:12 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: v7fs_vnops.c,v 1.7 2012/01/27 12:22:02 njoly Exp $	*/
+/*	$NetBSD: v7fs_vnops.c,v 1.7.2.1 2012/05/07 03:01:12 riz Exp $	*/
 
 /*-
  * Copyright (c) 2004, 2011 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: v7fs_vnops.c,v 1.7 2012/01/27 12:22:02 njoly Exp $");
+__KERNEL_RCSID(0, "$NetBSD: v7fs_vnops.c,v 1.7.2.1 2012/05/07 03:01:12 riz Exp $");
 #if defined _KERNEL_OPT
 #include "opt_v7fs.h"
 #endif
@@ -646,7 +646,7 @@ v7fs_fsync(void *v)
 	}
 
 	wait = (a->a_flags & FSYNC_WAIT);
-	error = vflushbuf(vp, wait);
+	error = vflushbuf(vp, a->a_flags);
 
 	if (error == 0 && (a->a_flags & FSYNC_DATAONLY) == 0)
 		error = v7fs_update(vp, NULL, NULL, wait ? UPDATE_WAIT : 0);
@@ -1314,4 +1314,3 @@ v7fs_readlink(void *v)
 error_exit:
 	return error;
 }
-

Index: src/sys/kern/vfs_subr.c
diff -u src/sys/kern/vfs_subr.c:1.432 src/sys/kern/vfs_subr.c:1.432.2.1
--- src/sys/kern/vfs_subr.c:1.432	Wed Feb  1 05:34:41 2012
+++ src/sys/kern/vfs_subr.c	Mon May  7 03:01:13 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: vfs_subr.c,v 1.432 2012/02/01 05:34:41 dholland Exp $	*/
+/*	$NetBSD: vfs_subr.c,v 1.432.2.1 2012/05/07 03:01:13 riz Exp $	*/
 
 /*-
  * Copyright (c) 1997, 1998, 2004, 2005, 2007, 2008 The NetBSD Foundation, Inc.
@@ -67,7 +67,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: vfs_subr.c,v 1.432 2012/02/01 05:34:41 dholland Exp $");
+__KERNEL_RCSID(0, "$NetBSD: vfs_subr.c,v 1.432.2.1 2012/05/07 03:01:13 riz Exp $");
 
 #include "opt_ddb.h"
 #include "opt_compat_netbsd.h"
@@ -277,14 +277,21 @@ restart:
  * buffers from being queued.
  */
 int
-vflushbuf(struct vnode *vp, int sync)
+vflushbuf(struct vnode *vp, int flags)
 {
 	struct buf *bp, *nbp;
-	int error, flags = PGO_CLEANIT | PGO_ALLPAGES | (sync ? PGO_SYNCIO : 0);
-	bool dirty;
+	int error, pflags;
+	bool dirty, sync;
 
+	sync = (flags & FSYNC_WAIT) != 0;
+	pflags = PGO_CLEANIT | PGO_ALLPAGES |
+		(sync ? PGO_SYNCIO : 0) |
+		((flags & FSYNC_LAZY) ? PGO_LAZY : 0);
 	mutex_enter(vp->v_interlock);
-	(void) VOP_PUTPAGES(vp, 0, 0, flags);
+	(void) VOP_PUTPAGES(vp, 0, 0, pflags);
+
+	if (LIST_EMPTY(&vp->v_dirtyblkhd) || (flags & FSYNC_DATAONLY))
+		return 0;
 
 loop:
 	mutex_enter(&bufcache_lock);
@@ -301,7 +308,7 @@ loop:
 		 * Wait for I/O associated with indirect blocks to complete,
 		 * since there is no way to quickly wait for them below.
 		 */
-		if (bp->b_vp == vp || sync == 0)
+		if (bp->b_vp == vp || !sync)
 			(void) bawrite(bp);
 		else {
 			error = bwrite(bp);
@@ -312,7 +319,7 @@ loop:
 	}
 	mutex_exit(&bufcache_lock);
 
-	if (sync == 0)
+	if (!sync)
 		return 0;
 
 	mutex_enter(vp->v_interlock);

Index: src/sys/kern/vfs_wapbl.c
diff -u src/sys/kern/vfs_wapbl.c:1.51 src/sys/kern/vfs_wapbl.c:1.51.2.1
--- src/sys/kern/vfs_wapbl.c:1.51	Sat Jan 28 18:02:56 2012
+++ src/sys/kern/vfs_wapbl.c	Mon May  7 03:01:13 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: vfs_wapbl.c,v 1.51 2012/01/28 18:02:56 para Exp $	*/
+/*	$NetBSD: vfs_wapbl.c,v 1.51.2.1 2012/05/07 03:01:13 riz Exp $	*/
 
 /*-
  * Copyright (c) 2003, 2008, 2009 The NetBSD Foundation, Inc.
@@ -36,7 +36,7 @@
 #define WAPBL_INTERNAL
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: vfs_wapbl.c,v 1.51 2012/01/28 18:02:56 para Exp $");
+__KERNEL_RCSID(0, "$NetBSD: vfs_wapbl.c,v 1.51.2.1 2012/05/07 03:01:13 riz Exp $");
 
 #include <sys/param.h>
 #include <sys/bitops.h>
@@ -752,6 +752,7 @@ wapbl_doio(void *data, size_t len, struc
 	bp->b_data = data;
 	bp->b_bufsize = bp->b_resid = bp->b_bcount = len;
 	bp->b_blkno = pbn;
+	BIO_SETPRIO(bp, BPRIO_TIMECRITICAL);
 
 	WAPBL_PRINTF(WAPBL_PRINT_IO,
 	    ("wapbl_doio: %s %d bytes at block %"PRId64" on dev 0x%"PRIx64"\n",

Index: src/sys/miscfs/genfs/genfs_io.c
diff -u src/sys/miscfs/genfs/genfs_io.c:1.53 src/sys/miscfs/genfs/genfs_io.c:1.53.8.1
--- src/sys/miscfs/genfs/genfs_io.c:1.53	Mon Oct 31 12:49:32 2011
+++ src/sys/miscfs/genfs/genfs_io.c	Mon May  7 03:01:12 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: genfs_io.c,v 1.53 2011/10/31 12:49:32 yamt Exp $	*/
+/*	$NetBSD: genfs_io.c,v 1.53.8.1 2012/05/07 03:01:12 riz Exp $	*/
 
 /*
  * Copyright (c) 1982, 1986, 1989, 1993
@@ -31,7 +31,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: genfs_io.c,v 1.53 2011/10/31 12:49:32 yamt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: genfs_io.c,v 1.53.8.1 2012/05/07 03:01:12 riz Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -1330,6 +1330,7 @@ genfs_do_io(struct vnode *vp, off_t off,
 	size_t bytes, iobytes, skipbytes;
 	struct buf *mbp, *bp;
 	const bool async = (flags & PGO_SYNCIO) == 0;
+	const bool lazy = (flags & PGO_LAZY) == 0;
 	const bool iowrite = rw == UIO_WRITE;
 	const int brw = iowrite ? B_WRITE : B_READ;
 	UVMHIST_FUNC(__func__); UVMHIST_CALLED(ubchist);
@@ -1373,7 +1374,7 @@ genfs_do_io(struct vnode *vp, off_t off,
 	}
 	if (curlwp == uvm.pagedaemon_lwp)
 		BIO_SETPRIO(mbp, BPRIO_TIMELIMITED);
-	else if (async)
+	else if (async || lazy)
 		BIO_SETPRIO(mbp, BPRIO_TIMENONCRITICAL);
 	else
 		BIO_SETPRIO(mbp, BPRIO_TIMECRITICAL);

Index: src/sys/miscfs/specfs/spec_vnops.c
diff -u src/sys/miscfs/specfs/spec_vnops.c:1.134 src/sys/miscfs/specfs/spec_vnops.c:1.134.8.1
--- src/sys/miscfs/specfs/spec_vnops.c:1.134	Sun Jun 12 03:35:58 2011
+++ src/sys/miscfs/specfs/spec_vnops.c	Mon May  7 03:01:14 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: spec_vnops.c,v 1.134 2011/06/12 03:35:58 rmind Exp $	*/
+/*	$NetBSD: spec_vnops.c,v 1.134.8.1 2012/05/07 03:01:14 riz Exp $	*/
 
 /*-
  * Copyright (c) 2008 The NetBSD Foundation, Inc.
@@ -58,7 +58,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: spec_vnops.c,v 1.134 2011/06/12 03:35:58 rmind Exp $");
+__KERNEL_RCSID(0, "$NetBSD: spec_vnops.c,v 1.134.8.1 2012/05/07 03:01:14 riz Exp $");
 
 #include <sys/param.h>
 #include <sys/proc.h>
@@ -869,7 +869,7 @@ spec_fsync(void *v)
 			if (error != EOPNOTSUPP)
 				return error;
 		}
-		return vflushbuf(vp, (ap->a_flags & FSYNC_WAIT) != 0);
+		return vflushbuf(vp, ap->a_flags);
 	}
 	return (0);
 }

Index: src/sys/ufs/chfs/chfs_vnops.c
diff -u src/sys/ufs/chfs/chfs_vnops.c:1.2 src/sys/ufs/chfs/chfs_vnops.c:1.2.4.1
--- src/sys/ufs/chfs/chfs_vnops.c:1.2	Thu Nov 24 21:09:37 2011
+++ src/sys/ufs/chfs/chfs_vnops.c	Mon May  7 03:01:12 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: chfs_vnops.c,v 1.2 2011/11/24 21:09:37 agc Exp $	*/
+/*	$NetBSD: chfs_vnops.c,v 1.2.4.1 2012/05/07 03:01:12 riz Exp $	*/
 
 /*-
  * Copyright (c) 2010 Department of Software Engineering,
@@ -1009,13 +1009,11 @@ chfs_fsync(void *v)
 				 off_t offhi;
 				 } */ *ap = v;
 	struct vnode *vp = ap->a_vp;
-	int wait;
 
 	if (ap->a_flags & FSYNC_CACHE) {
 		return ENODEV;
 	}
-	wait = (ap->a_flags & FSYNC_WAIT) != 0;
- 	vflushbuf(vp, wait);
+ 	vflushbuf(vp, ap->a_flags);
 	//struct chfs_inode *ip = VTOI(vp);
 	//chfs_set_vnode_size(vp, ip->write_size);
 

Index: src/sys/ufs/ext2fs/ext2fs_readwrite.c
diff -u src/sys/ufs/ext2fs/ext2fs_readwrite.c:1.58 src/sys/ufs/ext2fs/ext2fs_readwrite.c:1.58.6.1
--- src/sys/ufs/ext2fs/ext2fs_readwrite.c:1.58	Fri Nov 18 21:18:51 2011
+++ src/sys/ufs/ext2fs/ext2fs_readwrite.c	Mon May  7 03:01:12 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: ext2fs_readwrite.c,v 1.58 2011/11/18 21:18:51 christos Exp $	*/
+/*	$NetBSD: ext2fs_readwrite.c,v 1.58.6.1 2012/05/07 03:01:12 riz Exp $	*/
 
 /*-
  * Copyright (c) 1993
@@ -60,7 +60,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ext2fs_readwrite.c,v 1.58 2011/11/18 21:18:51 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ext2fs_readwrite.c,v 1.58.6.1 2012/05/07 03:01:12 riz Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -313,7 +313,8 @@ ext2fs_write(void *v)
 			if (!async && oldoff >> 16 != uio->uio_offset >> 16) {
 				mutex_enter(vp->v_interlock);
 				error = VOP_PUTPAGES(vp, (oldoff >> 16) << 16,
-				    (uio->uio_offset >> 16) << 16, PGO_CLEANIT);
+				    (uio->uio_offset >> 16) << 16,
+				    PGO_CLEANIT | PGO_LAZY);
 			}
 		}
 		if (error == 0 && ioflag & IO_SYNC) {

Index: src/sys/ufs/ext2fs/ext2fs_vnops.c
diff -u src/sys/ufs/ext2fs/ext2fs_vnops.c:1.101 src/sys/ufs/ext2fs/ext2fs_vnops.c:1.101.6.1
--- src/sys/ufs/ext2fs/ext2fs_vnops.c:1.101	Fri Nov 18 21:18:51 2011
+++ src/sys/ufs/ext2fs/ext2fs_vnops.c	Mon May  7 03:01:12 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: ext2fs_vnops.c,v 1.101 2011/11/18 21:18:51 christos Exp $	*/
+/*	$NetBSD: ext2fs_vnops.c,v 1.101.6.1 2012/05/07 03:01:12 riz Exp $	*/
 
 /*
  * Copyright (c) 1982, 1986, 1989, 1993
@@ -65,7 +65,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ext2fs_vnops.c,v 1.101 2011/11/18 21:18:51 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ext2fs_vnops.c,v 1.101.6.1 2012/05/07 03:01:12 riz Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -1361,7 +1361,7 @@ ext2fs_fsync(void *v)
 	if (vp->v_type == VBLK)
 		error = spec_fsync(v);
 	else
-		error = vflushbuf(vp, wait);
+		error = vflushbuf(vp, ap->a_flags);
 	if (error == 0 && (ap->a_flags & FSYNC_DATAONLY) == 0)
 		error = ext2fs_update(vp, NULL, NULL, wait ? UPDATE_WAIT : 0);
 

Index: src/sys/ufs/ffs/ffs_vfsops.c
diff -u src/sys/ufs/ffs/ffs_vfsops.c:1.275 src/sys/ufs/ffs/ffs_vfsops.c:1.275.2.1
--- src/sys/ufs/ffs/ffs_vfsops.c:1.275	Sun Jan 29 00:58:14 2012
+++ src/sys/ufs/ffs/ffs_vfsops.c	Mon May  7 03:01:12 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: ffs_vfsops.c,v 1.275 2012/01/29 00:58:14 nonaka Exp $	*/
+/*	$NetBSD: ffs_vfsops.c,v 1.275.2.1 2012/05/07 03:01:12 riz Exp $	*/
 
 /*-
  * Copyright (c) 2008, 2009 The NetBSD Foundation, Inc.
@@ -61,7 +61,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ffs_vfsops.c,v 1.275 2012/01/29 00:58:14 nonaka Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ffs_vfsops.c,v 1.275.2.1 2012/05/07 03:01:12 riz Exp $");
 
 #if defined(_KERNEL_OPT)
 #include "opt_ffs.h"
@@ -2141,7 +2141,7 @@ ffs_vfs_fsync(vnode_t *vp, int flags)
 	}
 #endif /* WAPBL */
 
-	error = vflushbuf(vp, (flags & FSYNC_WAIT) != 0);
+	error = vflushbuf(vp, flags);
 	if (error == 0 && (flags & FSYNC_CACHE) != 0) {
 		i = 1;
 		(void)VOP_IOCTL(vp, DIOCCACHESYNC, &i, FWRITE,

Index: src/sys/ufs/ffs/ffs_vnops.c
diff -u src/sys/ufs/ffs/ffs_vnops.c:1.120 src/sys/ufs/ffs/ffs_vnops.c:1.120.8.1
--- src/sys/ufs/ffs/ffs_vnops.c:1.120	Mon Jun 27 16:34:47 2011
+++ src/sys/ufs/ffs/ffs_vnops.c	Mon May  7 03:01:12 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: ffs_vnops.c,v 1.120 2011/06/27 16:34:47 manu Exp $	*/
+/*	$NetBSD: ffs_vnops.c,v 1.120.8.1 2012/05/07 03:01:12 riz Exp $	*/
 
 /*-
  * Copyright (c) 2008, 2009 The NetBSD Foundation, Inc.
@@ -61,7 +61,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ffs_vnops.c,v 1.120 2011/06/27 16:34:47 manu Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ffs_vnops.c,v 1.120.8.1 2012/05/07 03:01:12 riz Exp $");
 
 #if defined(_KERNEL_OPT)
 #include "opt_ffs.h"
@@ -455,35 +455,35 @@ int
 ffs_full_fsync(struct vnode *vp, int flags)
 {
 	int error, i, uflags;
-	struct mount *mp;
 
 	KASSERT(vp->v_tag == VT_UFS);
 	KASSERT(VTOI(vp) != NULL);
 	KASSERT(vp->v_type != VCHR && vp->v_type != VBLK);
 
-	error = 0;
 	uflags = UPDATE_CLOSE | ((flags & FSYNC_WAIT) ? UPDATE_WAIT : 0);
 
-	mp = vp->v_mount;
+#ifdef WAPBL
+	struct mount *mp = vp->v_mount;
+	if (mp && mp->mnt_wapbl) {
 
-	/*
-	 * Flush all dirty data associated with the vnode.
-	 */
-	if (vp->v_type == VREG) {
-		int pflags = PGO_ALLPAGES | PGO_CLEANIT;
+		/*
+		 * Flush all dirty data associated with the vnode.
+		 */
+		if (vp->v_type == VREG) {
+			int pflags = PGO_ALLPAGES | PGO_CLEANIT;
 
-		if ((flags & FSYNC_WAIT))
-			pflags |= PGO_SYNCIO;
-		if (fstrans_getstate(mp) == FSTRANS_SUSPENDING)
-			pflags |= PGO_FREE;
-		mutex_enter(vp->v_interlock);
-		error = VOP_PUTPAGES(vp, 0, 0, pflags);
-		if (error)
-			return error;
-	}
+			if ((flags & FSYNC_LAZY))
+				pflags |= PGO_LAZY;
+			if ((flags & FSYNC_WAIT))
+				pflags |= PGO_SYNCIO;
+			if (fstrans_getstate(mp) == FSTRANS_SUSPENDING)
+				pflags |= PGO_FREE;
+			mutex_enter(vp->v_interlock);
+			error = VOP_PUTPAGES(vp, 0, 0, pflags);
+			if (error)
+				return error;
+		}
 
-#ifdef WAPBL
-	if (mp && mp->mnt_wapbl) {
 		/*
 		 * Don't bother writing out metadata if the syncer is
 		 * making the request.  We will let the sync vnode
@@ -500,6 +500,8 @@ ffs_full_fsync(struct vnode *vp, int fla
 				return error;
 			error = ffs_update(vp, NULL, NULL, uflags);
 			UFS_WAPBL_END(mp);
+		} else {
+			error = 0;
 		}
 		if (error || (flags & FSYNC_NOLOG) != 0)
 			return error;
@@ -525,7 +527,7 @@ ffs_full_fsync(struct vnode *vp, int fla
 	}
 #endif /* WAPBL */
 
-	error = vflushbuf(vp, (flags & FSYNC_WAIT) != 0);
+	error = vflushbuf(vp, flags);
 	if (error == 0)
 		error = ffs_update(vp, NULL, NULL, uflags);
 	if (error == 0 && (flags & FSYNC_CACHE) != 0) {

Index: src/sys/ufs/ufs/ufs_readwrite.c
diff -u src/sys/ufs/ufs/ufs_readwrite.c:1.101 src/sys/ufs/ufs/ufs_readwrite.c:1.101.2.1
--- src/sys/ufs/ufs/ufs_readwrite.c:1.101	Mon Jan  2 22:10:45 2012
+++ src/sys/ufs/ufs/ufs_readwrite.c	Mon May  7 03:01:14 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: ufs_readwrite.c,v 1.101 2012/01/02 22:10:45 perseant Exp $	*/
+/*	$NetBSD: ufs_readwrite.c,v 1.101.2.1 2012/05/07 03:01:14 riz Exp $	*/
 
 /*-
  * Copyright (c) 1993
@@ -32,7 +32,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(1, "$NetBSD: ufs_readwrite.c,v 1.101 2012/01/02 22:10:45 perseant Exp $");
+__KERNEL_RCSID(1, "$NetBSD: ufs_readwrite.c,v 1.101.2.1 2012/05/07 03:01:14 riz Exp $");
 
 #ifdef LFS_READWRITE
 #define	FS			struct lfs
@@ -418,7 +418,7 @@ WRITE(void *v)
 			mutex_enter(vp->v_interlock);
 			error = VOP_PUTPAGES(vp, (oldoff >> 16) << 16,
 			    (uio->uio_offset >> 16) << 16,
-			    PGO_CLEANIT | PGO_JOURNALLOCKED);
+			    PGO_CLEANIT | PGO_JOURNALLOCKED | PGO_LAZY);
 			if (error)
 				break;
 		}

Index: src/sys/uvm/uvm_pager.h
diff -u src/sys/uvm/uvm_pager.h:1.42 src/sys/uvm/uvm_pager.h:1.42.8.1
--- src/sys/uvm/uvm_pager.h:1.42	Wed Sep 28 22:52:15 2011
+++ src/sys/uvm/uvm_pager.h	Mon May  7 03:01:13 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: uvm_pager.h,v 1.42 2011/09/28 22:52:15 matt Exp $	*/
+/*	$NetBSD: uvm_pager.h,v 1.42.8.1 2012/05/07 03:01:13 riz Exp $	*/
 
 /*
  * Copyright (c) 1997 Charles D. Cranor and Washington University.
@@ -154,6 +154,7 @@ struct uvm_pagerops {
 #define PGO_NOTIMESTAMP 0x1000	/* don't mark object accessed/modified */
 #define PGO_RECLAIM	0x2000	/* object is being reclaimed */
 #define PGO_GLOCKHELD	0x4000	/* genfs_node's lock is already held */
+#define PGO_LAZY	0x8000	/* equivalent of MNT_LAZY / FSYNC_LAZY */
 
 /* page we are not interested in getting */
 #define PGO_DONTCARE ((struct vm_page *) -1L)	/* [get only] */

Reply via email to