diff options
author | julian <julian@FreeBSD.org> | 1998-12-03 02:27:35 +0000 |
---|---|---|
committer | julian <julian@FreeBSD.org> | 1998-12-03 02:27:35 +0000 |
commit | c1ef9f83c919949e90841ae0990aa9a0273d6490 (patch) | |
tree | 766d55719160577172499b05ce54cc96670cf3c4 /sbin/fsck_ffs/utilities.c | |
parent | 1a5eceeafeb45fc95a5c9fe1830e0d3e349ec69a (diff) | |
download | FreeBSD-src-c1ef9f83c919949e90841ae0990aa9a0273d6490.zip FreeBSD-src-c1ef9f83c919949e90841ae0990aa9a0273d6490.tar.gz |
Reviewed by: Don Lewis <Don.Lewis@tsc.tdk.com>
Submitted by: Kirk McKusick <mckusick@McKusick.COM>
Obtained from: Mckusick, BSDI and a host of others
This exactly matches Kirks sources imported under the
Tag MCKUSICK2. These are as supplied by kirk with one small
change needed to compile under freeBSD.
Some FreeBSD patches will be added back, though many have been
added to Kirk's sources already.
Diffstat (limited to 'sbin/fsck_ffs/utilities.c')
-rw-r--r-- | sbin/fsck_ffs/utilities.c | 56 |
1 files changed, 43 insertions, 13 deletions
diff --git a/sbin/fsck_ffs/utilities.c b/sbin/fsck_ffs/utilities.c index 0d82d6e..5ea02b6 100644 --- a/sbin/fsck_ffs/utilities.c +++ b/sbin/fsck_ffs/utilities.c @@ -32,20 +32,16 @@ */ #ifndef lint -#if 0 static const char sccsid[] = "@(#)utilities.c 8.6 (Berkeley) 5/19/95"; -#endif -static const char rcsid[] = - "$Id$"; #endif /* not lint */ #include <sys/param.h> +#include <sys/time.h> #include <ufs/ufs/dinode.h> #include <ufs/ufs/dir.h> #include <ufs/ffs/fs.h> -#include <ctype.h> #include <err.h> #include <string.h> @@ -116,6 +112,26 @@ reply(question) } /* + * Look up state information for an inode. + */ +struct inostat * +inoinfo(inum) + ino_t inum; +{ + static struct inostat unallocated = { USTATE, 0, 0 }; + struct inostatlist *ilp; + int iloff; + + if (inum > maxino) + errx(EEXIT, "inoinfo: inumber %d out of range", inum); + ilp = &inostathead[inum / sblock.fs_ipg]; + iloff = inum % sblock.fs_ipg; + if (iloff >= ilp->il_numalloced) + return (&unallocated); + return (&ilp->il_stat[iloff]); +} + +/* * Malloc buffers and set up cache. */ void @@ -270,16 +286,23 @@ ckfini(markclean) free((char *)bp); } if (bufhead.b_size != cnt) - errx(EEXIT, "panic: lost %d buffers", bufhead.b_size - cnt); + errx(EEXIT, "Panic: lost %d buffers", bufhead.b_size - cnt); pbp = pdirbp = (struct bufarea *)0; - if (markclean && sblock.fs_clean == 0) { - sblock.fs_clean = 1; + if (sblock.fs_clean != markclean) { + sblock.fs_clean = markclean; sbdirty(); ofsmodified = fsmodified; flush(fswritefd, &sblk); fsmodified = ofsmodified; - if (!preen) - printf("\n***** FILE SYSTEM MARKED CLEAN *****\n"); + if (!preen) { + printf("\n***** FILE SYSTEM MARKED %s *****\n", + markclean ? "CLEAN" : "DIRTY"); + if (!markclean) + rerun = 1; + } + } else if (!preen && !markclean) { + printf("\n***** FILE SYSTEM STILL DIRTY *****\n"); + rerun = 1; } if (debug) printf("cache missed %ld of %ld (%d%%)\n", diskreads, @@ -324,6 +347,8 @@ bread(fd, buf, blk, size) } } printf("\n"); + if (errs) + resolved = 0; return (errs); } @@ -348,6 +373,7 @@ bwrite(fd, buf, blk, size) fsmodified = 1; return; } + resolved = 0; rwerror("WRITE", blk); if (lseek(fd, offset, 0) < 0) rwerror("SEEK", blk); @@ -438,7 +464,8 @@ getpathname(namebuf, curdir, ino) return; } if (busy || - (statemap[curdir] != DSTATE && statemap[curdir] != DFOUND)) { + (inoinfo(curdir)->ino_state != DSTATE && + inoinfo(curdir)->ino_state != DFOUND)) { (void)strcpy(namebuf, "?"); return; } @@ -497,6 +524,7 @@ void catchquit(sig) int sig; { + printf("returning to single-user after filesystem check\n"); returntosingle = 1; (void)signal(SIGQUIT, SIG_DFL); @@ -589,14 +617,16 @@ pfatal(fmt, va_alist) va_end(ap); if (usedsoftdep) (void)fprintf(stderr, - "\nUNEXPECTED SOFTDEP INCONSISTENCY\n"); + "\nUNEXPECTED SOFT UPDATE INCONSISTENCY\n"); return; } + if (cdevname == NULL) + cdevname = "fsck"; (void)fprintf(stderr, "%s: ", cdevname); (void)vfprintf(stderr, fmt, ap); (void)fprintf(stderr, "\n%s: UNEXPECTED%sINCONSISTENCY; RUN fsck MANUALLY.\n", - cdevname, usedsoftdep ? " SOFTDEP " : " "); + cdevname, usedsoftdep ? " SOFT UPDATE " : " "); ckfini(0); exit(EEXIT); } |