From 7d88cc57bfb464896ea2e3fd2b0cffe6d6ea7ecd Mon Sep 17 00:00:00 2001 From: obrien Date: Fri, 30 Jan 2009 18:33:05 +0000 Subject: Add the '-C' "check clean" flag. If the FS is marked clean, skip file system checking. However, if the file system is not clean, perform a full fsck. Reviewed by: delphij Obtained from: Juniper Networks --- sbin/fsck/fsck.8 | 9 +++++++-- sbin/fsck/fsck.c | 7 +++++-- sbin/fsck/fsutil.h | 1 + 3 files changed, 13 insertions(+), 4 deletions(-) (limited to 'sbin/fsck') diff --git a/sbin/fsck/fsck.8 b/sbin/fsck/fsck.8 index b7360d9..a4f6d4b 100644 --- a/sbin/fsck/fsck.8 +++ b/sbin/fsck/fsck.8 @@ -29,7 +29,7 @@ .\" .\" $FreeBSD$ .\" -.Dd April 25, 2001 +.Dd January 25, 2009 .Dt FSCK 8 .Os .Sh NAME @@ -37,7 +37,7 @@ .Nd file system consistency check and interactive repair .Sh SYNOPSIS .Nm -.Op Fl dfnpvy +.Op Fl Cdfnpvy .Op Fl B | F .Op Fl T Ar fstype : Ns Ar fsoptions .Op Fl t Ar fstype @@ -112,6 +112,11 @@ to be the partition and slice designators. .Pp The options are as follows: .Bl -tag -width indent +.It Fl C +Check if the +.Dq clean +flag is set in the superblock and skip file system checks if file system was +properly dismounted and marked clean. .It Fl d Debugging mode. Just print the commands without executing them. diff --git a/sbin/fsck/fsck.c b/sbin/fsck/fsck.c index 490a29a..13eb9f0 100644 --- a/sbin/fsck/fsck.c +++ b/sbin/fsck/fsck.c @@ -103,7 +103,7 @@ main(int argc, char *argv[]) TAILQ_INIT(&selhead); TAILQ_INIT(&opthead); - while ((i = getopt(argc, argv, "BdvpfFnyl:t:T:")) != -1) + while ((i = getopt(argc, argv, "BCdvpfFnyl:t:T:")) != -1) switch (i) { case 'B': if (flags & CHECK_BACKGRD) @@ -128,6 +128,9 @@ main(int argc, char *argv[]) case 'p': flags |= CHECK_PREEN; /*FALLTHROUGH*/ + case 'C': + flags |= CHECK_CLEAN; + /*FALLTHROUGH*/ case 'n': case 'y': globopt[1] = i; @@ -566,7 +569,7 @@ static void usage(void) { static const char common[] = - "[-dfnpvy] [-B | -F] [-T fstype:fsoptions] [-t fstype]"; + "[-Cdfnpvy] [-B | -F] [-T fstype:fsoptions] [-t fstype]"; (void)fprintf(stderr, "usage: %s %s [special | node] ...\n", getprogname(), common); diff --git a/sbin/fsck/fsutil.h b/sbin/fsck/fsutil.h index 84e7290..657668e 100644 --- a/sbin/fsck/fsutil.h +++ b/sbin/fsck/fsutil.h @@ -48,6 +48,7 @@ char *estrdup(const char *); #define CHECK_DEBUG 0x0004 #define CHECK_BACKGRD 0x0008 #define DO_BACKGRD 0x0010 +#define CHECK_CLEAN 0x0020 struct fstab; int checkfstab(int, int (*)(struct fstab *), -- cgit v1.1