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