-c now takes a level; write out all superblocks after a conversion
authorKirk McKusick <mckusick@ucbvax.Berkeley.EDU>
Fri, 3 Jul 1992 07:35:57 +0000 (23:35 -0800)
committerKirk McKusick <mckusick@ucbvax.Berkeley.EDU>
Fri, 3 Jul 1992 07:35:57 +0000 (23:35 -0800)
SCCS-vsn: sbin/fsck/main.c 5.32

usr/src/sbin/fsck/main.c

index c98e5a5..10d6172 100644 (file)
@@ -12,7 +12,7 @@ char copyright[] =
 #endif /* not lint */
 
 #ifndef lint
 #endif /* not lint */
 
 #ifndef lint
-static char sccsid[] = "@(#)main.c     5.31 (Berkeley) %G%";
+static char sccsid[] = "@(#)main.c     5.32 (Berkeley) %G%";
 #endif /* not lint */
 
 #include <sys/param.h>
 #endif /* not lint */
 
 #include <sys/param.h>
@@ -40,7 +40,7 @@ main(argc, argv)
        extern int optind;
 
        sync();
        extern int optind;
 
        sync();
-       while ((ch = getopt(argc, argv, "cdpnNyYb:l:m:")) != EOF) {
+       while ((ch = getopt(argc, argv, "dpnNyYb:c:l:m:")) != EOF) {
                switch (ch) {
                case 'p':
                        preen++;
                switch (ch) {
                case 'p':
                        preen++;
@@ -52,9 +52,9 @@ main(argc, argv)
                        break;
 
                case 'c':
                        break;
 
                case 'c':
-                       cvtflag++;
+                       cvtlevel = argtoi('c', "conversion level", optarg, 10);
                        break;
                        break;
-
+               
                case 'd':
                        debug++;
                        break;
                case 'd':
                        debug++;
                        break;
@@ -143,6 +143,7 @@ checkfilesys(filesys, mntpt, auxdata, child)
        daddr_t n_ffree, n_bfree;
        struct dups *dp;
        struct zlncnt *zlnp;
        daddr_t n_ffree, n_bfree;
        struct dups *dp;
        struct zlncnt *zlnp;
+       int cylno;
 
        if (preen && child)
                (void)signal(SIGQUIT, voidquit);
 
        if (preen && child)
                (void)signal(SIGQUIT, voidquit);
@@ -244,6 +245,14 @@ checkfilesys(filesys, mntpt, auxdata, child)
                (void)time(&sblock.fs_time);
                sbdirty();
        }
                (void)time(&sblock.fs_time);
                sbdirty();
        }
+       if (cvtlevel && sblk.b_dirty) {
+               /* 
+                * Write out the duplicate super blocks
+                */
+               for (cylno = 0; cylno < sblock.fs_ncg; cylno++)
+                       bwrite(fswritefd, (char *)&sblock,
+                           fsbtodb(&sblock, cgsblock(&sblock, cylno)), SBSIZE);
+       }
        ckfini();
        free(blockmap);
        free(statemap);
        ckfini();
        free(blockmap);
        free(statemap);