Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/netbsd-1-6]: src/sbin/fsck_ffs Pullup rev 1.57 (requested by fvdl in tic...



details:   https://anonhg.NetBSD.org/src/rev/ed69aaf064f9
branches:  netbsd-1-6
changeset: 530162:ed69aaf064f9
user:      jmc <jmc%NetBSD.org@localhost>
date:      Sun Feb 23 08:00:10 2003 +0000

description:
Pullup rev 1.57 (requested by fvdl in ticket #1180)
 Only check relevant fields when comparing the superblock to an alternate
 superblock. Avoids false positives should fsck_ffs be run on a filesystem
 that was created after the UFS2 code has been merged.

diffstat:

 sbin/fsck_ffs/setup.c |  84 +++++++++++++++++++-------------------------------
 1 files changed, 32 insertions(+), 52 deletions(-)

diffs (124 lines):

diff -r 51b18abc50a0 -r ed69aaf064f9 sbin/fsck_ffs/setup.c
--- a/sbin/fsck_ffs/setup.c     Fri Feb 21 05:37:51 2003 +0000
+++ b/sbin/fsck_ffs/setup.c     Sun Feb 23 08:00:10 2003 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: setup.c,v 1.52 2001/12/19 10:05:20 fvdl Exp $  */
+/*     $NetBSD: setup.c,v 1.52.2.1 2003/02/23 08:00:10 jmc Exp $       */
 
 /*
  * Copyright (c) 1980, 1986, 1993
@@ -38,7 +38,7 @@
 #if 0
 static char sccsid[] = "@(#)setup.c    8.10 (Berkeley) 5/9/95";
 #else
-__RCSID("$NetBSD: setup.c,v 1.52 2001/12/19 10:05:20 fvdl Exp $");
+__RCSID("$NetBSD: setup.c,v 1.52.2.1 2003/02/23 08:00:10 jmc Exp $");
 #endif
 #endif /* not lint */
 
@@ -507,9 +507,6 @@
                { badsb(listerr, "NCG OUT OF RANGE"); return (0); }
        if (sblock->fs_cpg < 1)
                { badsb(listerr, "CPG OUT OF RANGE"); return (0); }
-       if (sblock->fs_ncg * sblock->fs_cpg < sblock->fs_ncyl ||
-           (sblock->fs_ncg - 1) * sblock->fs_cpg >= sblock->fs_ncyl)
-               { badsb(listerr, "NCYL LESS THAN NCG*CPG"); return (0); }
        if (sblock->fs_sbsize > SBSIZE)
                { badsb(listerr, "SIZE PREPOSTEROUSLY LARGE"); return (0); }
        /*
@@ -526,8 +523,8 @@
                return (1);
        }
        /*
-        * Set all possible fields that could differ, then do check
-        * of whole super block against an alternate super block.
+        * Compare all fields that should not differ in the alternat super-
+        * block.
         * When an alternate super-block is specified this check is skipped.
         */
        getblk(&asblk, cgsblock(sblock, sblock->fs_ncg - 1), sblock->fs_sbsize);
@@ -573,56 +570,39 @@
 {
 
        /*
-        * Copy fields which we don't care if they're different in the
-        * alternate superblocks, as they're either likely to be
+        * Don't compare fields of which we don't care if they're different
+        * in the alternate superblocks, as they're either likely to be
         * different because they're per-cylinder-group specific, or
         * because they're transient details which are only maintained
         * in the primary superblock.
         */
-       asb->fs_firstfield = sb->fs_firstfield;
-       asb->fs_unused_1 = sb->fs_unused_1;
-       asb->fs_time = sb->fs_time;
-       asb->fs_cstotal = sb->fs_cstotal;
-       asb->fs_cgrotor = sb->fs_cgrotor;
-       asb->fs_fmod = sb->fs_fmod;
-       asb->fs_clean = sb->fs_clean;
-       asb->fs_ronly = sb->fs_ronly;
-       asb->fs_flags = sb->fs_flags;
-       asb->fs_maxcontig = sb->fs_maxcontig;
-       asb->fs_minfree = sb->fs_minfree;
-       asb->fs_optim = sb->fs_optim;
-       asb->fs_rotdelay = sb->fs_rotdelay;
-       asb->fs_maxbpg = sb->fs_maxbpg;
-       memmove(asb->fs_ocsp, sb->fs_ocsp, sizeof sb->fs_ocsp);
-       asb->fs_contigdirs = sb->fs_contigdirs;
-       asb->fs_csp = sb->fs_csp;
-       asb->fs_maxcluster = sb->fs_maxcluster;
-       memmove(asb->fs_fsmnt, sb->fs_fsmnt, sizeof sb->fs_fsmnt);
-       memmove(asb->fs_snapinum,
-               sb->fs_snapinum, sizeof sb->fs_snapinum);
-       asb->fs_avgfilesize = sb->fs_avgfilesize;
-       asb->fs_avgfpdir = sb->fs_avgfpdir;
-       asb->fs_pendingblocks = sb->fs_pendingblocks;
-       asb->fs_pendinginodes = sb->fs_pendinginodes;
-       memmove(asb->fs_sparecon,
-               sb->fs_sparecon, sizeof sb->fs_sparecon);
-       /*
-        * The following should not have to be copied, but need to be.
-        */
-       asb->fs_fsbtodb = sb->fs_fsbtodb;
-       asb->fs_interleave = sb->fs_interleave;
-       asb->fs_npsect = sb->fs_npsect;
-       asb->fs_nrpos = sb->fs_nrpos;
-       asb->fs_qbmask = sb->fs_qbmask;
-       asb->fs_qfmask = sb->fs_qfmask;
-       asb->fs_state = sb->fs_state;
-       asb->fs_maxfilesize = sb->fs_maxfilesize;
+       if (asb->fs_sblkno != sb->fs_sblkno ||
+           asb->fs_cblkno != sb->fs_cblkno ||
+           asb->fs_iblkno != sb->fs_iblkno ||
+           asb->fs_dblkno != sb->fs_dblkno ||
+           asb->fs_cgoffset != sb->fs_cgoffset ||
+           asb->fs_cgmask != sb->fs_cgmask ||
+           asb->fs_ncg != sb->fs_ncg ||
+           asb->fs_bsize != sb->fs_bsize ||
+           asb->fs_fsize != sb->fs_fsize ||
+           asb->fs_frag != sb->fs_frag ||
+           asb->fs_bmask != sb->fs_bmask ||
+           asb->fs_fmask != sb->fs_fmask ||
+           asb->fs_bshift != sb->fs_bshift ||
+           asb->fs_fshift != sb->fs_fshift ||
+           asb->fs_fragshift != sb->fs_fragshift ||
+           asb->fs_fsbtodb != sb->fs_fsbtodb ||
+           asb->fs_sbsize != sb->fs_sbsize ||
+           asb->fs_nindir != sb->fs_nindir ||
+           asb->fs_inopb != sb->fs_inopb ||
+           asb->fs_cssize != sb->fs_cssize ||
+           asb->fs_cpg != sb->fs_cpg ||
+           asb->fs_ipg != sb->fs_ipg ||
+           asb->fs_fpg != sb->fs_fpg ||
+           asb->fs_magic != sb->fs_magic)
+               return (1);
 
-       /*
-        * Compare the superblocks, effectively checking every other
-        * field to see if they differ.
-        */
-       return (memcmp(sb, asb, (int)sb->fs_sbsize));
+       return (0);
 }
 
 static void



Home | Main Index | Thread Index | Old Index