summaryrefslogtreecommitdiff
path: root/sys/kern/vfs_subr.c
diff options
context:
space:
mode:
authorMichael Shalayeff <mickey@cvs.openbsd.org>1999-03-11 18:29:04 +0000
committerMichael Shalayeff <mickey@cvs.openbsd.org>1999-03-11 18:29:04 +0000
commitab37375c2ef6a4966d0320349f82bd8c2c4f944a (patch)
treef570788b16e7a26b15c1b49339504eb9a711bbbc /sys/kern/vfs_subr.c
parentaca0d40a6f3b72ef4dd18f7dc65882c30457ab59 (diff)
factor sync+wait operation out into a separate function.
Diffstat (limited to 'sys/kern/vfs_subr.c')
-rw-r--r--sys/kern/vfs_subr.c43
1 files changed, 28 insertions, 15 deletions
diff --git a/sys/kern/vfs_subr.c b/sys/kern/vfs_subr.c
index 4b5c24997d1..44daf913b23 100644
--- a/sys/kern/vfs_subr.c
+++ b/sys/kern/vfs_subr.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: vfs_subr.c,v 1.32 1999/02/26 05:17:43 art Exp $ */
+/* $OpenBSD: vfs_subr.c,v 1.33 1999/03/11 18:28:55 mickey Exp $ */
/* $NetBSD: vfs_subr.c,v 1.53 1996/04/22 01:39:13 christos Exp $ */
/*
@@ -1727,9 +1727,6 @@ vfs_unmountall()
void
vfs_shutdown()
{
- register struct buf *bp;
- int iter, nbusy;
-
/* XXX Should suspend scheduling. */
(void) spl0();
@@ -1751,24 +1748,40 @@ vfs_shutdown()
vfs_unmountall();
}
- /* Sync again after unmount, just in case. */
- sys_sync(&proc0, (void *)0, (register_t *)0);
+ if (vfs_syncwait(1))
+ printf("giving up\n");
+ else
+ printf("done\n");
+}
+
+/*
+ * perform sync() operation and wait for buffers to flush.
+ * assumtions: called w/ scheduler disabled and physical io enabled
+ * for now called at spl0() XXX
+ */
+int
+vfs_syncwait(verbose)
+ int verbose;
+{
+ register struct buf *bp;
+ int iter, nbusy;
+ sys_sync(&proc0, (void *)0, (register_t *)0);
+
/* Wait for sync to finish. */
for (iter = 0; iter < 20; iter++) {
nbusy = 0;
for (bp = &buf[nbuf]; --bp >= buf; )
if ((bp->b_flags & (B_BUSY|B_INVAL)) == B_BUSY)
nbusy++;
- if (nbusy == 0)
- break;
- printf("%d ", nbusy);
- DELAY(40000 * iter);
- }
- if (nbusy)
- printf("giving up\n");
- else
- printf("done\n");
+ if (nbusy == 0)
+ break;
+ if (verbose)
+ printf("%d ", nbusy);
+ DELAY(40000 * iter);
+ }
+
+ return nbusy;
}
/*