Module Name:    src
Committed By:   hannken
Date:           Tue Apr 26 11:32:40 UTC 2011

Modified Files:
        src/share/man/man9: vnode.9
        src/sys/fs/msdosfs: msdosfs_vnops.c
        src/sys/fs/ntfs: ntfs_vnops.c
        src/sys/fs/sysvbfs: sysvbfs_vnops.c
        src/sys/fs/udf: udf_subr.c udf_vnops.c
        src/sys/kern: vfs_subr.c
        src/sys/miscfs/specfs: spec_vnops.c
        src/sys/sys: param.h vnode.h
        src/sys/ufs/ext2fs: ext2fs_vnops.c

Log Message:
Change vflushbuf() to return an error if a synchronous write fails.

Welcome to 5.99.51.


To generate a diff of this commit:
cvs rdiff -u -r1.51 -r1.52 src/share/man/man9/vnode.9
cvs rdiff -u -r1.74 -r1.75 src/sys/fs/msdosfs/msdosfs_vnops.c
cvs rdiff -u -r1.47 -r1.48 src/sys/fs/ntfs/ntfs_vnops.c
cvs rdiff -u -r1.36 -r1.37 src/sys/fs/sysvbfs/sysvbfs_vnops.c
cvs rdiff -u -r1.113 -r1.114 src/sys/fs/udf/udf_subr.c
cvs rdiff -u -r1.63 -r1.64 src/sys/fs/udf/udf_vnops.c
cvs rdiff -u -r1.421 -r1.422 src/sys/kern/vfs_subr.c
cvs rdiff -u -r1.131 -r1.132 src/sys/miscfs/specfs/spec_vnops.c
cvs rdiff -u -r1.387 -r1.388 src/sys/sys/param.h
cvs rdiff -u -r1.228 -r1.229 src/sys/sys/vnode.h
cvs rdiff -u -r1.98 -r1.99 src/sys/ufs/ext2fs/ext2fs_vnops.c

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

Modified files:

Index: src/share/man/man9/vnode.9
diff -u src/share/man/man9/vnode.9:1.51 src/share/man/man9/vnode.9:1.52
--- src/share/man/man9/vnode.9:1.51	Thu Dec  2 12:54:13 2010
+++ src/share/man/man9/vnode.9	Tue Apr 26 11:32:38 2011
@@ -1,4 +1,4 @@
-.\"     $NetBSD: vnode.9,v 1.51 2010/12/02 12:54:13 wiz Exp $
+.\"     $NetBSD: vnode.9,v 1.52 2011/04/26 11:32:38 hannken Exp $
 .\"
 .\" Copyright (c) 2001, 2005, 2006 The NetBSD Foundation, Inc.
 .\" All rights reserved.
@@ -27,7 +27,7 @@
 .\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 .\" POSSIBILITY OF SUCH DAMAGE.
 .\"
-.Dd July 21, 2010
+.Dd April 26, 2011
 .Dt VNODE 9
 .Os
 .Sh NAME
@@ -97,7 +97,7 @@
 .Fn vdevgone "int maj" "int minl" "int minh" "enum vtype type"
 .Ft void
 .Fn vwakeup "struct buf *bp"
-.Ft void
+.Ft int
 .Fn vflushbuf "struct vnode *vp" "int sync"
 .Ft int
 .Fn vinvalbuf "struct vnode *vp" "int flags" "kauth_cred_t cred" "struct lwp *l" "int slpflag" "int slptimeo"

Index: src/sys/fs/msdosfs/msdosfs_vnops.c
diff -u src/sys/fs/msdosfs/msdosfs_vnops.c:1.74 src/sys/fs/msdosfs/msdosfs_vnops.c:1.75
--- src/sys/fs/msdosfs/msdosfs_vnops.c:1.74	Sun Mar 20 12:21:28 2011
+++ src/sys/fs/msdosfs/msdosfs_vnops.c	Tue Apr 26 11:32:38 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: msdosfs_vnops.c,v 1.74 2011/03/20 12:21:28 hannken Exp $	*/
+/*	$NetBSD: msdosfs_vnops.c,v 1.75 2011/04/26 11:32:38 hannken 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.74 2011/03/20 12:21:28 hannken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: msdosfs_vnops.c,v 1.75 2011/04/26 11:32:38 hannken Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -1800,10 +1800,8 @@
 
 	fstrans_start(vp->v_mount, FSTRANS_LAZY);
 	wait = (ap->a_flags & FSYNC_WAIT) != 0;
-	vflushbuf(vp, wait);
-	if ((ap->a_flags & FSYNC_DATAONLY) != 0)
-		error = 0;
-	else
+	error = vflushbuf(vp, wait);
+	if (error == 0 && (ap->a_flags & FSYNC_DATAONLY) == 0)
 		error = msdosfs_update(vp, NULL, NULL, wait ? UPDATE_WAIT : 0);
 
 	if (error == 0 && ap->a_flags & FSYNC_CACHE) {

Index: src/sys/fs/ntfs/ntfs_vnops.c
diff -u src/sys/fs/ntfs/ntfs_vnops.c:1.47 src/sys/fs/ntfs/ntfs_vnops.c:1.48
--- src/sys/fs/ntfs/ntfs_vnops.c:1.47	Thu Jun 24 13:03:10 2010
+++ src/sys/fs/ntfs/ntfs_vnops.c	Tue Apr 26 11:32:38 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: ntfs_vnops.c,v 1.47 2010/06/24 13:03:10 hannken Exp $	*/
+/*	$NetBSD: ntfs_vnops.c,v 1.48 2011/04/26 11:32:38 hannken Exp $	*/
 
 /*
  * Copyright (c) 1992, 1993
@@ -36,7 +36,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ntfs_vnops.c,v 1.47 2010/06/24 13:03:10 hannken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ntfs_vnops.c,v 1.48 2011/04/26 11:32:38 hannken Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -756,9 +756,7 @@
 	}
 
 	wait = (ap->a_flags & FSYNC_WAIT) != 0;
-	vflushbuf(vp, wait);
-
-	return 0;
+	return vflushbuf(vp, wait);
 }
 
 /*

Index: src/sys/fs/sysvbfs/sysvbfs_vnops.c
diff -u src/sys/fs/sysvbfs/sysvbfs_vnops.c:1.36 src/sys/fs/sysvbfs/sysvbfs_vnops.c:1.37
--- src/sys/fs/sysvbfs/sysvbfs_vnops.c:1.36	Mon Jan 31 18:48:50 2011
+++ src/sys/fs/sysvbfs/sysvbfs_vnops.c	Tue Apr 26 11:32:38 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: sysvbfs_vnops.c,v 1.36 2011/01/31 18:48:50 njoly Exp $	*/
+/*	$NetBSD: sysvbfs_vnops.c,v 1.37 2011/04/26 11:32:38 hannken 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.36 2011/01/31 18:48:50 njoly Exp $");
+__KERNEL_RCSID(0, "$NetBSD: sysvbfs_vnops.c,v 1.37 2011/04/26 11:32:38 hannken Exp $");
 
 #include <sys/param.h>
 #include <sys/kernel.h>
@@ -810,11 +810,8 @@
 	}
 
 	wait = (ap->a_flags & FSYNC_WAIT) != 0;
-	vflushbuf(vp, wait);
-
-	if ((ap->a_flags & FSYNC_DATAONLY) != 0)
-		error = 0;
-	else
+	error = vflushbuf(vp, wait);
+	if (error == 0 && (ap->a_flags & FSYNC_DATAONLY) == 0)
 		error = sysvbfs_update(vp, NULL, NULL, wait ? UPDATE_WAIT : 0);
 
 	return error;

Index: src/sys/fs/udf/udf_subr.c
diff -u src/sys/fs/udf/udf_subr.c:1.113 src/sys/fs/udf/udf_subr.c:1.114
--- src/sys/fs/udf/udf_subr.c:1.113	Sat Jan 22 18:02:18 2011
+++ src/sys/fs/udf/udf_subr.c	Tue Apr 26 11:32:39 2011
@@ -1,4 +1,4 @@
-/* $NetBSD: udf_subr.c,v 1.113 2011/01/22 18:02:18 reinoud Exp $ */
+/* $NetBSD: udf_subr.c,v 1.114 2011/04/26 11:32:39 hannken 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.113 2011/01/22 18:02:18 reinoud Exp $");
+__KERNEL_RCSID(0, "$NetBSD: udf_subr.c,v 1.114 2011/04/26 11:32:39 hannken Exp $");
 #endif /* not lint */
 
 
@@ -1829,10 +1829,10 @@
 			NULL, NULL);
 
 	bitmap_node->i_flags |= IN_MODIFIED;
-	vflushbuf(bitmap_node->vnode, 1 /* sync */);
-
-	error = VOP_FSYNC(bitmap_node->vnode,
-			FSCRED, FSYNC_WAIT, 0, 0);
+	error = vflushbuf(bitmap_node->vnode, 1 /* sync */);
+	if (error == 0)
+		error = VOP_FSYNC(bitmap_node->vnode,
+				FSCRED, FSYNC_WAIT, 0, 0);
 
 	if (error)
 		printf( "Error writing out metadata partition unalloced "
@@ -2833,7 +2833,9 @@
 
 //	mutex_exit(&ump->allocate_mutex);
 
-	vflushbuf(ump->vat_node->vnode, 1 /* sync */);
+	error = vflushbuf(ump->vat_node->vnode, 1 /* sync */);
+	if (error)
+		goto out;
 	error = VOP_FSYNC(ump->vat_node->vnode,
 			FSCRED, FSYNC_WAIT, 0, 0);
 	if (error)
@@ -3778,7 +3780,7 @@
 		/* write out the VAT data and all its descriptors */
 		DPRINTF(VOLUMES, ("writeout vat_node\n"));
 		udf_writeout_vat(ump);
-		vflushbuf(ump->vat_node->vnode, 1 /* sync */);
+		(void) vflushbuf(ump->vat_node->vnode, 1 /* sync */);
 
 		(void) VOP_FSYNC(ump->vat_node->vnode,
 				FSCRED, FSYNC_WAIT, 0, 0);

Index: src/sys/fs/udf/udf_vnops.c
diff -u src/sys/fs/udf/udf_vnops.c:1.63 src/sys/fs/udf/udf_vnops.c:1.64
--- src/sys/fs/udf/udf_vnops.c:1.63	Sun Apr 24 21:35:30 2011
+++ src/sys/fs/udf/udf_vnops.c	Tue Apr 26 11:32:39 2011
@@ -1,4 +1,4 @@
-/* $NetBSD: udf_vnops.c,v 1.63 2011/04/24 21:35:30 rmind Exp $ */
+/* $NetBSD: udf_vnops.c,v 1.64 2011/04/26 11:32:39 hannken 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.63 2011/04/24 21:35:30 rmind Exp $");
+__KERNEL_RCSID(0, "$NetBSD: udf_vnops.c,v 1.64 2011/04/26 11:32:39 hannken Exp $");
 #endif /* not lint */
 
 
@@ -2214,7 +2214,9 @@
 
 	/* flush data and wait for it when requested */
 	wait = (ap->a_flags & FSYNC_WAIT) ? UPDATE_WAIT : 0;
-	vflushbuf(vp, wait);
+	error = vflushbuf(vp, wait);
+	if (error)
+		return error;
 
 	if (udf_node == NULL) {
 		printf("udf_fsync() called on NULL udf_node!\n");

Index: src/sys/kern/vfs_subr.c
diff -u src/sys/kern/vfs_subr.c:1.421 src/sys/kern/vfs_subr.c:1.422
--- src/sys/kern/vfs_subr.c:1.421	Sat Apr  2 04:28:56 2011
+++ src/sys/kern/vfs_subr.c	Tue Apr 26 11:32:39 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: vfs_subr.c,v 1.421 2011/04/02 04:28:56 rmind Exp $	*/
+/*	$NetBSD: vfs_subr.c,v 1.422 2011/04/26 11:32:39 hannken 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.421 2011/04/02 04:28:56 rmind Exp $");
+__KERNEL_RCSID(0, "$NetBSD: vfs_subr.c,v 1.422 2011/04/26 11:32:39 hannken Exp $");
 
 #include "opt_ddb.h"
 #include "opt_compat_netbsd.h"
@@ -272,11 +272,11 @@
  * Called with the underlying vnode locked, which should prevent new dirty
  * buffers from being queued.
  */
-void
+int
 vflushbuf(struct vnode *vp, int sync)
 {
 	struct buf *bp, *nbp;
-	int flags = PGO_CLEANIT | PGO_ALLPAGES | (sync ? PGO_SYNCIO : 0);
+	int error, flags = PGO_CLEANIT | PGO_ALLPAGES | (sync ? PGO_SYNCIO : 0);
 	bool dirty;
 
 	mutex_enter(&vp->v_interlock);
@@ -298,14 +298,17 @@
 		 */
 		if (bp->b_vp == vp || sync == 0)
 			(void) bawrite(bp);
-		else
-			(void) bwrite(bp);
+		else {
+			error = bwrite(bp);
+			if (error)
+				return error;
+		}
 		goto loop;
 	}
 	mutex_exit(&bufcache_lock);
 
 	if (sync == 0)
-		return;
+		return 0;
 
 	mutex_enter(&vp->v_interlock);
 	while (vp->v_numoutput != 0)
@@ -317,6 +320,8 @@
 		vprint("vflushbuf: dirty", vp);
 		goto loop;
 	}
+
+	return 0;
 }
 
 /*

Index: src/sys/miscfs/specfs/spec_vnops.c
diff -u src/sys/miscfs/specfs/spec_vnops.c:1.131 src/sys/miscfs/specfs/spec_vnops.c:1.132
--- src/sys/miscfs/specfs/spec_vnops.c:1.131	Sat Aug 21 13:19:40 2010
+++ src/sys/miscfs/specfs/spec_vnops.c	Tue Apr 26 11:32:39 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: spec_vnops.c,v 1.131 2010/08/21 13:19:40 pgoyette Exp $	*/
+/*	$NetBSD: spec_vnops.c,v 1.132 2011/04/26 11:32:39 hannken 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.131 2010/08/21 13:19:40 pgoyette Exp $");
+__KERNEL_RCSID(0, "$NetBSD: spec_vnops.c,v 1.132 2011/04/26 11:32:39 hannken Exp $");
 
 #include <sys/param.h>
 #include <sys/proc.h>
@@ -869,7 +869,7 @@
 			if (error != EOPNOTSUPP)
 				return error;
 		}
-		vflushbuf(vp, (ap->a_flags & FSYNC_WAIT) != 0);
+		return vflushbuf(vp, (ap->a_flags & FSYNC_WAIT) != 0);
 	}
 	return (0);
 }

Index: src/sys/sys/param.h
diff -u src/sys/sys/param.h:1.387 src/sys/sys/param.h:1.388
--- src/sys/sys/param.h:1.387	Sun Apr 24 21:50:34 2011
+++ src/sys/sys/param.h	Tue Apr 26 11:32:39 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: param.h,v 1.387 2011/04/24 21:50:34 rmind Exp $	*/
+/*	$NetBSD: param.h,v 1.388 2011/04/26 11:32:39 hannken Exp $	*/
 
 /*-
  * Copyright (c) 1982, 1986, 1989, 1993
@@ -63,7 +63,7 @@
  *	2.99.9		(299000900)
  */
 
-#define	__NetBSD_Version__	599005000	/* NetBSD 5.99.50 */
+#define	__NetBSD_Version__	599005100	/* NetBSD 5.99.51 */
 
 #define __NetBSD_Prereq__(M,m,p) (((((M) * 100000000) + \
     (m) * 1000000) + (p) * 100) <= __NetBSD_Version__)

Index: src/sys/sys/vnode.h
diff -u src/sys/sys/vnode.h:1.228 src/sys/sys/vnode.h:1.229
--- src/sys/sys/vnode.h:1.228	Mon Apr 18 15:53:04 2011
+++ src/sys/sys/vnode.h	Tue Apr 26 11:32:39 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: vnode.h,v 1.228 2011/04/18 15:53:04 rmind Exp $	*/
+/*	$NetBSD: vnode.h,v 1.229 2011/04/26 11:32:39 hannken Exp $	*/
 
 /*-
  * Copyright (c) 2008 The NetBSD Foundation, Inc.
@@ -552,7 +552,7 @@
 void	vdevgone(int, int, int, enum vtype);
 int	vfinddev(dev_t, enum vtype, struct vnode **);
 int	vflush(struct mount *, struct vnode *, int);
-void	vflushbuf(struct vnode *, int);
+int	vflushbuf(struct vnode *, int);
 int 	vget(struct vnode *, int);
 bool	vtryget(struct vnode *);
 void 	vgone(struct vnode *);

Index: src/sys/ufs/ext2fs/ext2fs_vnops.c
diff -u src/sys/ufs/ext2fs/ext2fs_vnops.c:1.98 src/sys/ufs/ext2fs/ext2fs_vnops.c:1.99
--- src/sys/ufs/ext2fs/ext2fs_vnops.c:1.98	Sun Apr 24 21:35:30 2011
+++ src/sys/ufs/ext2fs/ext2fs_vnops.c	Tue Apr 26 11:32:40 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: ext2fs_vnops.c,v 1.98 2011/04/24 21:35:30 rmind Exp $	*/
+/*	$NetBSD: ext2fs_vnops.c,v 1.99 2011/04/26 11:32:40 hannken Exp $	*/
 
 /*
  * Copyright (c) 1982, 1986, 1989, 1993
@@ -65,7 +65,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ext2fs_vnops.c,v 1.98 2011/04/24 21:35:30 rmind Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ext2fs_vnops.c,v 1.99 2011/04/26 11:32:40 hannken Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -1333,12 +1333,10 @@
 	wait = (ap->a_flags & FSYNC_WAIT) != 0;
 
 	if (vp->v_type == VBLK)
-		spec_fsync(v);
-	else
-		vflushbuf(vp, wait);
-	if ((ap->a_flags & FSYNC_DATAONLY) != 0)
-		error = 0;
+		error = spec_fsync(v);
 	else
+		error = vflushbuf(vp, wait);
+	if (error == 0 && (ap->a_flags & FSYNC_DATAONLY) == 0)
 		error = ext2fs_update(vp, NULL, NULL, wait ? UPDATE_WAIT : 0);
 
 	if (error == 0 && ap->a_flags & FSYNC_CACHE) {

Reply via email to