summaryrefslogtreecommitdiffstats
path: root/sbin/newfs/mkfs.c
diff options
context:
space:
mode:
Diffstat (limited to 'sbin/newfs/mkfs.c')
-rw-r--r--sbin/newfs/mkfs.c37
1 files changed, 25 insertions, 12 deletions
diff --git a/sbin/newfs/mkfs.c b/sbin/newfs/mkfs.c
index fea37d6..8e1931e 100644
--- a/sbin/newfs/mkfs.c
+++ b/sbin/newfs/mkfs.c
@@ -153,6 +153,7 @@ int makedir __P((struct direct *, int));
void rdfs __P((daddr_t, int, char *));
void setblock __P((struct fs *, unsigned char *, int));
void wtfs __P((daddr_t, int, char *));
+void wtfsflush __P((void));
#ifndef STANDALONE
void get_memleft __P((void));
@@ -719,6 +720,7 @@ next:
for (cylno = 0; cylno < sblock.fs_ncg; cylno++)
wtfs(fsbtodb(&sblock, cgsblock(&sblock, cylno)),
sbsize, (char *)&sblock);
+ wtfsflush();
/*
* Update information about this partion in pack
* label, to that it may be updated on disk.
@@ -1309,6 +1311,7 @@ rdfs(bno, size, bf)
{
int n;
+ wtfsflush();
if (mfs) {
memmove(bf, membase + bno * sectorsize, size);
return;
@@ -1330,6 +1333,27 @@ int wc_end; /* bytes */
static char wc[WCSIZE]; /* bytes */
/*
+ * Flush dirty write behind buffer.
+ */
+void
+wtfsflush()
+{
+ int n;
+ if (wc_end) {
+ if (lseek(fso, (off_t)wc_sect * sectorsize, SEEK_SET) < 0) {
+ printf("seek error: %ld\n", (long)wc_sect);
+ err(35, "wtfs - writecombine");
+ }
+ n = write(fso, wc, wc_end);
+ if (n != wc_end) {
+ printf("write error: %ld\n", (long)wc_sect);
+ err(36, "wtfs - writecombine");
+ }
+ wc_end = 0;
+ }
+}
+
+/*
* write a block to the file system
*/
void
@@ -1364,18 +1388,7 @@ wtfs(bno, size, bf)
return;
done = 1;
}
- if (wc_end) {
- if (lseek(fso, (off_t)wc_sect * sectorsize, SEEK_SET) < 0) {
- printf("seek error: %ld\n", (long)wc_sect);
- err(35, "wtfs - writecombine");
- }
- n = write(fso, wc, wc_end);
- if (n != wc_end) {
- printf("write error: %ld\n", (long)wc_sect);
- err(36, "wtfs - writecombine");
- }
- wc_end = 0;
- }
+ wtfsflush();
if (done)
return;
if (lseek(fso, (off_t)bno * sectorsize, SEEK_SET) < 0) {
OpenPOWER on IntegriCloud