summaryrefslogtreecommitdiffstats
path: root/sys/ufs/ffs/ffs_vnops.c
diff options
context:
space:
mode:
authorjulian <julian@FreeBSD.org>1998-06-10 19:27:56 +0000
committerjulian <julian@FreeBSD.org>1998-06-10 19:27:56 +0000
commit27341c23aa6dcd5d613a523fa4194eb5b5f59029 (patch)
tree8b1a5ca0cc20b51d2dcf02e07195502f496ed349 /sys/ufs/ffs/ffs_vnops.c
parentacd840b15c2055a6ec2f6e8c95159e9360e554bc (diff)
downloadFreeBSD-src-27341c23aa6dcd5d613a523fa4194eb5b5f59029.zip
FreeBSD-src-27341c23aa6dcd5d613a523fa4194eb5b5f59029.tar.gz
Back out John's changes 1.45 -> 1.46
Kirk confirms that the original semantic was what he wanted... (well, a very slight difference) May fix "dangling deps" panic with soft updates.
Diffstat (limited to 'sys/ufs/ffs/ffs_vnops.c')
-rw-r--r--sys/ufs/ffs/ffs_vnops.c38
1 files changed, 17 insertions, 21 deletions
diff --git a/sys/ufs/ffs/ffs_vnops.c b/sys/ufs/ffs/ffs_vnops.c
index 4afbbe0..8160d04 100644
--- a/sys/ufs/ffs/ffs_vnops.c
+++ b/sys/ufs/ffs/ffs_vnops.c
@@ -31,7 +31,7 @@
* SUCH DAMAGE.
*
* @(#)ffs_vnops.c 8.15 (Berkeley) 5/14/95
- * $Id: ffs_vnops.c,v 1.48 1998/03/30 09:56:05 phk Exp $
+ * $Id: ffs_vnops.c,v 1.49 1998/05/11 21:41:13 julian Exp $
*/
#include <sys/param.h>
@@ -175,7 +175,8 @@ loop2:
* for them below.
*/
if ((bp->b_vp == vp) || (ap->a_waitfor != MNT_WAIT)) {
- if (bp->b_flags & B_CLUSTEROK) {
+ if ((bp->b_flags & B_CLUSTEROK) &&
+ ap->a_waitfor != MNT_WAIT) {
(void) vfs_bio_awrite(bp);
splx(s);
} else {
@@ -213,26 +214,22 @@ loop2:
skipmeta = 0;
goto loop2; /* stay within the splbio() */
}
- splx(s);
if (ap->a_waitfor == MNT_WAIT) {
+ while (vp->v_numoutput) {
+ vp->v_flag |= VBWAIT;
+ (void) tsleep((caddr_t)&vp->v_numoutput,
+ PRIBIO + 4, "ffsfsn", 0);
+ }
+ /*
+ * Ensure that any filesystem metatdata associated
+ * with the vnode has been written.
+ */
+ splx(s);
+ if ((error = softdep_sync_metadata(ap)) != 0)
+ return (error);
s = splbio();
- if (!DOINGSOFTDEP(vp)) {
- while (vp->v_numoutput) {
- vp->v_flag |= VBWAIT;
- (void) tsleep((caddr_t)&vp->v_numoutput, PRIBIO + 4, "ffsfsn", 0);
- }
- } else {
- /*
- * Ensure that any filesystem metatdata associated
- * with the vnode has been written.
- */
- if ((error = softdep_sync_metadata(ap)) != 0) {
- splx(s);
- return (error);
- }
- }
if (vp->v_dirtyblkhd.lh_first) {
/*
@@ -252,11 +249,10 @@ loop2:
vprint("ffs_fsync: dirty", vp);
#endif
}
- splx(s);
}
+ splx(s);
getmicrotime(&tv);
- error = UFS_UPDATE(ap->a_vp, &tv, &tv, (ap->a_waitfor == MNT_WAIT));
- if (error)
+ if ((error = UFS_UPDATE(vp, &tv, &tv, ap->a_waitfor == MNT_WAIT)) != 0)
return (error);
if (DOINGSOFTDEP(vp) && ap->a_waitfor == MNT_WAIT)
error = softdep_fsync(vp);
OpenPOWER on IntegriCloud