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) {