On Tue, May 26, 2020 at 03:54:15PM +0200, Otto Moerbeek wrote:

> On Tue, May 26, 2020 at 07:51:28AM -0600, Todd C. Miller wrote:
> 
> > On Tue, 26 May 2020 12:07:21 +0200, Otto Moerbeek wrote:
> > 
> > > Apart from the noting the strange Subject: I also like to mention one
> > > change in the way cylinder groups are scanned. The current code scans
> > > forward and backward, which causes an uneven distribution of full cgs
> > > (the upper end of the cgs will get full first). Fix that by always
> > > scanning forward, wrapping to cg 0 if needed.
> > 
> > Should that be a separate commit?  I can't find any problems
> > with the diff but I haven't tried running with it yet.
> > 
> >  - todd
> 
> Yeah, I can do that. Note that it must be comitted first, since the
> loop condition is always true if I change the loop var to unsigned.
> 
>       -Otto
> 

And a new diff. I accidentally capitalized a letter just before sending.
Thanks to naddy for spotting that.

        -Otto

Index: sbin/clri/clri.c
===================================================================
RCS file: /cvs/src/sbin/clri/clri.c,v
retrieving revision 1.20
diff -u -p -r1.20 clri.c
--- sbin/clri/clri.c    28 Jun 2019 13:32:43 -0000      1.20
+++ sbin/clri/clri.c    26 May 2020 09:41:18 -0000
@@ -68,7 +68,8 @@ main(int argc, char *argv[])
        char *fs, sblock[SBLOCKSIZE];
        size_t bsize;
        off_t offset;
-       int i, fd, imax, inonum;
+       int i, fd;
+       ino_t imax, inonum;
 
        if (argc < 3)
                usage();
Index: sbin/dumpfs/dumpfs.c
===================================================================
RCS file: /cvs/src/sbin/dumpfs/dumpfs.c,v
retrieving revision 1.35
diff -u -p -r1.35 dumpfs.c
--- sbin/dumpfs/dumpfs.c        17 Feb 2020 16:11:25 -0000      1.35
+++ sbin/dumpfs/dumpfs.c        26 May 2020 09:41:18 -0000
@@ -69,7 +69,7 @@ union {
 #define acg    cgun.cg
 
 int    dumpfs(int, const char *);
-int    dumpcg(const char *, int, int);
+int    dumpcg(const char *, int, u_int);
 int    marshal(const char *);
 int    open_disk(const char *);
 void   pbits(void *, int);
@@ -163,6 +163,7 @@ dumpfs(int fd, const char *name)
        size_t size;
        off_t off;
        int i, j;
+       u_int cg;
 
        switch (afs.fs_magic) {
        case FS_UFS2_MAGIC:
@@ -172,7 +173,7 @@ dumpfs(int fd, const char *name)
                    afs.fs_magic, ctime(&fstime));
                printf("superblock location\t%jd\tid\t[ %x %x ]\n",
                    (intmax_t)afs.fs_sblockloc, afs.fs_id[0], afs.fs_id[1]);
-               printf("ncg\t%d\tsize\t%jd\tblocks\t%jd\n",
+               printf("ncg\t%u\tsize\t%jd\tblocks\t%jd\n",
                    afs.fs_ncg, (intmax_t)fssize, (intmax_t)afs.fs_dsize);
                break;
        case FS_UFS1_MAGIC:
@@ -198,7 +199,7 @@ dumpfs(int fd, const char *name)
                printf("cylgrp\t%s\tinodes\t%s\tfslevel %d\n",
                    i < 1 ? "static" : "dynamic",
                    i < 2 ? "4.2/4.3BSD" : "4.4BSD", i);
-               printf("ncg\t%d\tncyl\t%d\tsize\t%d\tblocks\t%d\n",
+               printf("ncg\t%u\tncyl\t%d\tsize\t%d\tblocks\t%d\n",
                    afs.fs_ncg, afs.fs_ncyl, afs.fs_ffs1_size, 
afs.fs_ffs1_dsize);
                break;
        default:
@@ -223,9 +224,9 @@ dumpfs(int fd, const char *name)
                    (intmax_t)afs.fs_cstotal.cs_ndir,
                    (intmax_t)afs.fs_cstotal.cs_nifree, 
                    (intmax_t)afs.fs_cstotal.cs_nffree);
-               printf("bpg\t%d\tfpg\t%d\tipg\t%d\n",
+               printf("bpg\t%d\tfpg\t%d\tipg\t%u\n",
                    afs.fs_fpg / afs.fs_frag, afs.fs_fpg, afs.fs_ipg);
-               printf("nindir\t%d\tinopb\t%d\tmaxfilesize\t%ju\n",
+               printf("nindir\t%d\tinopb\t%u\tmaxfilesize\t%ju\n",
                    afs.fs_nindir, afs.fs_inopb, 
                    (uintmax_t)afs.fs_maxfilesize);
                printf("sbsize\t%d\tcgsize\t%d\tcsaddr\t%jd\tcssize\t%d\n",
@@ -238,10 +239,10 @@ dumpfs(int fd, const char *name)
                printf("nbfree\t%d\tndir\t%d\tnifree\t%d\tnffree\t%d\n",
                    afs.fs_ffs1_cstotal.cs_nbfree, afs.fs_ffs1_cstotal.cs_ndir,
                    afs.fs_ffs1_cstotal.cs_nifree, 
afs.fs_ffs1_cstotal.cs_nffree);
-               printf("cpg\t%d\tbpg\t%d\tfpg\t%d\tipg\t%d\n",
+               printf("cpg\t%d\tbpg\t%d\tfpg\t%d\tipg\t%u\n",
                    afs.fs_cpg, afs.fs_fpg / afs.fs_frag, afs.fs_fpg,
                    afs.fs_ipg);
-               printf("nindir\t%d\tinopb\t%d\tnspf\t%d\tmaxfilesize\t%ju\n",
+               printf("nindir\t%d\tinopb\t%u\tnspf\t%d\tmaxfilesize\t%ju\n",
                    afs.fs_nindir, afs.fs_inopb, afs.fs_nspf,
                    (uintmax_t)afs.fs_maxfilesize);
                printf("sbsize\t%d\tcgsize\t%d\tcgoffset %d\tcgmask\t0x%08x\n",
@@ -261,7 +262,7 @@ dumpfs(int fd, const char *name)
            afs.fs_sblkno, afs.fs_cblkno, afs.fs_iblkno, afs.fs_dblkno);
        printf("cgrotor\t%d\tfmod\t%d\tronly\t%d\tclean\t%d\n",
            afs.fs_cgrotor, afs.fs_fmod, afs.fs_ronly, afs.fs_clean);
-       printf("avgfpdir %d\tavgfilesize %d\n",
+       printf("avgfpdir %u\tavgfilesize %u\n",
            afs.fs_avgfpdir, afs.fs_avgfilesize);
        printf("flags\t");
        if (afs.fs_magic == FS_UFS2_MAGIC ||
@@ -296,8 +297,8 @@ dumpfs(int fd, const char *name)
                if (pread(fd, (char *)afs.fs_csp + i, size, off) != size)
                        goto err;
        }
-       for (i = 0; i < afs.fs_ncg; i++) {
-               struct csum *cs = &afs.fs_cs(&afs, i);
+       for (cg = 0; cg < afs.fs_ncg; cg++) {
+               struct csum *cs = &afs.fs_cs(&afs, cg);
                if (i && i % 4 == 0)
                        printf("\n\t");
                printf("(%d,%d,%d,%d) ",
@@ -312,8 +313,8 @@ dumpfs(int fd, const char *name)
                printf("blocks in last group %ld\n\n",
                    (long)((fssize % afs.fs_fpg) / afs.fs_frag));
        }
-       for (i = 0; i < afs.fs_ncg; i++)
-               if (dumpcg(name, fd, i))
+       for (cg = 0; cg < afs.fs_ncg; cg++)
+               if (dumpcg(name, fd, cg))
                        goto err;
        return (0);
 
@@ -322,13 +323,13 @@ err:      warn("%s", name);
 }
 
 int
-dumpcg(const char *name, int fd, int c)
+dumpcg(const char *name, int fd, u_int c)
 {
        time_t cgtime;
        off_t cur;
        int i, j;
 
-       printf("\ncg %d:\n", c);
+       printf("\ncg %u:\n", c);
        cur = (off_t)fsbtodb(&afs, cgtod(&afs, c)) * DEV_BSIZE;
        if (pread(fd, &acg, afs.fs_bsize, cur) != afs.fs_bsize) {
                warn("%s: error reading cg", name);
@@ -339,7 +340,7 @@ dumpcg(const char *name, int fd, int c)
                cgtime = acg.cg_ffs2_time;
                printf("magic\t%x\ttell\t%jx\ttime\t%s",
                    acg.cg_magic, (intmax_t)cur, ctime(&cgtime));
-               printf("cgx\t%d\tndblk\t%d\tniblk\t%d\tinitiblk %d\n",
+               printf("cgx\t%u\tndblk\t%u\tniblk\t%u\tinitiblk %u\n",
                    acg.cg_cgx, acg.cg_ndblk, acg.cg_ffs2_niblk,
                    acg.cg_initediblk);
                break;
@@ -349,7 +350,7 @@ dumpcg(const char *name, int fd, int c)
                    afs.fs_postblformat == FS_42POSTBLFMT ?
                    ((struct ocg *)&acg)->cg_magic : acg.cg_magic,
                    (intmax_t)cur, ctime(&cgtime));
-               printf("cgx\t%d\tncyl\t%d\tniblk\t%d\tndblk\t%d\n",
+               printf("cgx\t%u\tncyl\t%d\tniblk\t%d\tndblk\t%u\n",
                    acg.cg_cgx, acg.cg_ncyl, acg.cg_niblk, acg.cg_ndblk);
                break;
        default:
@@ -358,10 +359,10 @@ dumpcg(const char *name, int fd, int c)
        printf("nbfree\t%d\tndir\t%d\tnifree\t%d\tnffree\t%d\n",
            acg.cg_cs.cs_nbfree, acg.cg_cs.cs_ndir,
            acg.cg_cs.cs_nifree, acg.cg_cs.cs_nffree);
-       printf("rotor\t%d\tirotor\t%d\tfrotor\t%d\nfrsum",
+       printf("rotor\t%u\tirotor\t%u\tfrotor\t%u\nfrsum",
            acg.cg_rotor, acg.cg_irotor, acg.cg_frotor);
        for (i = 1, j = 0; i < afs.fs_frag; i++) {
-               printf("\t%d", acg.cg_frsum[i]);
+               printf("\t%u", acg.cg_frsum[i]);
                j += i * acg.cg_frsum[i];
        }
        printf("\nsum of frsum: %d", j);
@@ -416,8 +417,8 @@ marshal(const char *name)
        /* -c unimplemented */
        printf("-e %d ", afs.fs_maxbpg);
        printf("-f %d ", afs.fs_fsize);
-       printf("-g %d ", afs.fs_avgfilesize);
-       printf("-h %d ", afs.fs_avgfpdir);
+       printf("-g %u ", afs.fs_avgfilesize);
+       printf("-h %u ", afs.fs_avgfpdir);
        /* -i unimplemented */
        printf("-m %d ", afs.fs_minfree);
        printf("-o ");
Index: sbin/fsck_ffs/pass1.c
===================================================================
RCS file: /cvs/src/sbin/fsck_ffs/pass1.c,v
retrieving revision 1.45
diff -u -p -r1.45 pass1.c
--- sbin/fsck_ffs/pass1.c       12 Apr 2017 15:23:08 -0000      1.45
+++ sbin/fsck_ffs/pass1.c       26 May 2020 09:41:18 -0000
@@ -66,7 +66,7 @@ pass1(void)
        ino_t inumber, inosused, ninosused;
        size_t inospace;
        struct inostat *info;
-       int c;
+       u_int c;
        struct inodesc idesc;
        daddr_t i, cgd;
        u_int8_t *cp;
Index: sbin/fsck_ffs/pass1b.c
===================================================================
RCS file: /cvs/src/sbin/fsck_ffs/pass1b.c,v
retrieving revision 1.21
diff -u -p -r1.21 pass1b.c
--- sbin/fsck_ffs/pass1b.c      20 Jan 2015 18:22:21 -0000      1.21
+++ sbin/fsck_ffs/pass1b.c      26 May 2020 09:41:18 -0000
@@ -55,7 +55,7 @@ pass1b_info(char *buf, size_t buflen)
 void
 pass1b(void)
 {
-       int c, i;
+       u_int c, i;
        union dinode *dp;
        struct inodesc idesc;
        ino_t inumber;
Index: sbin/fsck_ffs/pass4.c
===================================================================
RCS file: /cvs/src/sbin/fsck_ffs/pass4.c,v
retrieving revision 1.25
diff -u -p -r1.25 pass4.c
--- sbin/fsck_ffs/pass4.c       13 Apr 2017 07:30:21 -0000      1.25
+++ sbin/fsck_ffs/pass4.c       26 May 2020 09:41:18 -0000
@@ -59,7 +59,8 @@ pass4(void)
        struct zlncnt *zlnp;
        union dinode *dp;
        struct inodesc idesc;
-       int n, c, i;
+       int n, i;
+       u_int c;
 
        memset(&idesc, 0, sizeof(struct inodesc));
        idesc.id_type = ADDR;
Index: sbin/fsck_ffs/pass5.c
===================================================================
RCS file: /cvs/src/sbin/fsck_ffs/pass5.c,v
retrieving revision 1.48
diff -u -p -r1.48 pass5.c
--- sbin/fsck_ffs/pass5.c       20 Jan 2015 18:22:21 -0000      1.48
+++ sbin/fsck_ffs/pass5.c       26 May 2020 09:41:18 -0000
@@ -48,26 +48,28 @@
 
 #define MINIMUM(a, b)  (((a) < (b)) ? (a) : (b))
 
-static int info_cg;
-static int info_maxcg;
+static u_int info_cg;
+static u_int info_maxcg;
 
 static int
 pass5_info(char *buf, size_t buflen)
 {
-       return (snprintf(buf, buflen, "phase 5, cg %d/%d",
+       return (snprintf(buf, buflen, "phase 5, cg %u/%u",
            info_cg, info_maxcg) > 0);
 }
 
 void
 pass5(void)
 {
-       int c, blk, frags, basesize, sumsize, mapsize, savednrpos=0;
+       int blk, frags, basesize, sumsize, mapsize, savednrpos=0;
+       u_int c;
        int inomapsize, blkmapsize;
        struct fs *fs = &sblock;
        struct cg *cg = &cgrp;
        daddr_t dbase, dmax;
        daddr_t d;
-       long i, j, k, rewritecg = 0;
+       long i, k, rewritecg = 0;
+       ino_t j;
        struct csum *cs;
        struct csum_total cstotal;
        struct inodesc idesc[3];
@@ -179,7 +181,7 @@ pass5(void)
                info_cg = c;
                getblk(&cgblk, cgtod(fs, c), fs->fs_cgsize);
                if (!cg_chkmagic(cg))
-                       pfatal("CG %d: BAD MAGIC NUMBER\n", c);
+                       pfatal("CG %u: BAD MAGIC NUMBER\n", c);
                dbase = cgbase(fs, c);
                dmax = dbase + fs->fs_fpg;
                if (dmax > fs->fs_size)
@@ -215,7 +217,7 @@ pass5(void)
                                newcg->cg_irotor = cg->cg_irotor;
                } else {
                        newcg->cg_ncyl = 0;
-                       if ((unsigned)cg->cg_initediblk > fs->fs_ipg)
+                       if (cg->cg_initediblk > fs->fs_ipg)
                                newcg->cg_initediblk = fs->fs_ipg;
                        else
                                newcg->cg_initediblk = cg->cg_initediblk;
@@ -228,7 +230,7 @@ pass5(void)
                memset(cg_inosused(newcg), 0, (size_t)(mapsize));
                if (fs->fs_postblformat == FS_42POSTBLFMT)
                        ocg->cg_magic = CG_MAGIC;
-               j = fs->fs_ipg * c;
+               j = fs->fs_ipg * (ino_t)c;
                for (i = 0; i < inostathead[c].il_numalloced; j++, i++) {
                        switch (GET_ISTATE(j)) {
 
@@ -339,8 +341,8 @@ pass5(void)
                                                continue;
                                        if (cg_inosused(cg)[i] & (1 << k))
                                                continue;
-                                       pwarn("ALLOCATED INODE %lld MARKED 
FREE\n",
-                                             ((long long)c * fs->fs_ipg + i * 
8) + k);
+                                       pwarn("ALLOCATED INODE %llu MARKED 
FREE\n",
+                                             ((ino_t)c * fs->fs_ipg + i * 8) + 
k);
                                }
                        }
                        for (i = 0; i < blkmapsize; i++) {
Index: sbin/fsck_ffs/setup.c
===================================================================
RCS file: /cvs/src/sbin/fsck_ffs/setup.c,v
retrieving revision 1.66
diff -u -p -r1.66 setup.c
--- sbin/fsck_ffs/setup.c       28 Jun 2019 13:32:43 -0000      1.66
+++ sbin/fsck_ffs/setup.c       26 May 2020 09:41:18 -0000
@@ -366,7 +366,7 @@ found:
        else
                inopb = sblock.fs_bsize / sizeof(struct ufs1_dinode);
        if (INOPB(&sblock) != inopb) {
-               pwarn("INCONSISTENT INOPB=%d\n", INOPB(&sblock));
+               pwarn("INCONSISTENT INOPB=%u\n", INOPB(&sblock));
                sblock.fs_inopb = inopb;
                if (preen)
                        printf(" (FIXED)\n");
Index: sbin/fsck_ffs/utilities.c
===================================================================
RCS file: /cvs/src/sbin/fsck_ffs/utilities.c,v
retrieving revision 1.52
diff -u -p -r1.52 utilities.c
--- sbin/fsck_ffs/utilities.c   6 Feb 2019 13:26:13 -0000       1.52
+++ sbin/fsck_ffs/utilities.c   26 May 2020 09:41:18 -0000
@@ -581,7 +581,7 @@ dofix(struct inodesc *idesc, char *msg)
                return (0);
 
        default:
-               errexit("UNKNOWN INODESC FIX MODE %d\n", idesc->id_fix);
+               errexit("UNKNOWN INODESC FIX MODE %u\n", idesc->id_fix);
        }
        /* NOTREACHED */
 }
Index: sbin/fsirand/fsirand.c
===================================================================
RCS file: /cvs/src/sbin/fsirand/fsirand.c,v
retrieving revision 1.42
diff -u -p -r1.42 fsirand.c
--- sbin/fsirand/fsirand.c      17 Feb 2020 19:00:58 -0000      1.42
+++ sbin/fsirand/fsirand.c      26 May 2020 09:41:18 -0000
@@ -101,7 +101,8 @@ fsirand(char *device)
        ino_t inumber;
        daddr_t sblockloc, dblk;
        char sbuf[SBSIZE], sbuftmp[SBSIZE];
-       int devfd, n, cg, i;
+       int devfd, n, i;
+       u_int cg;
        char *devpath, *ib;
        u_int32_t bsize = DEV_BSIZE;
        struct disklabel label;
Index: sbin/growfs/growfs.c
===================================================================
RCS file: /cvs/src/sbin/growfs/growfs.c,v
retrieving revision 1.53
diff -u -p -r1.53 growfs.c
--- sbin/growfs/growfs.c        3 Jul 2019 03:24:01 -0000       1.53
+++ sbin/growfs/growfs.c        26 May 2020 09:41:18 -0000
@@ -136,8 +136,8 @@ static void usage(void);
 static int     isblock(struct fs *, unsigned char *, int);
 static void    clrblock(struct fs *, unsigned char *, int);
 static void    setblock(struct fs *, unsigned char *, int);
-static void    initcg(int, time_t, int, unsigned int);
-static void    updjcg(int, time_t, int, int, unsigned int);
+static void    initcg(u_int, time_t, int, unsigned int);
+static void    updjcg(u_int, time_t, int, int, unsigned int);
 static void    updcsloc(time_t, int, int, unsigned int);
 static struct disklabel        *get_disklabel(int);
 static void    return_disklabel(int, struct disklabel *, unsigned int);
@@ -167,8 +167,8 @@ int colwidth;
 static void
 growfs(int fsi, int fso, unsigned int Nflag)
 {
-       int     i;
-       int     cylno, j;
+       int     i, j;
+       u_int   cg;
        time_t  utime;
        char    tmpbuf[100];
 
@@ -199,7 +199,7 @@ growfs(int fsi, int fso, unsigned int Nf
            (float)sblock.fs_size * sblock.fs_fsize * B2MBFACTOR,
            (intmax_t)fsbtodb(&sblock, sblock.fs_size), sblock.fs_bsize,
            sblock.fs_fsize);
-       printf("\tusing %d cylinder groups of %.2fMB, %d blks, %d inodes.\n",
+       printf("\tusing %u cylinder groups of %.2fMB, %d blks, %u inodes.\n",
            sblock.fs_ncg, (float)sblock.fs_fpg * sblock.fs_fsize * B2MBFACTOR,
            sblock.fs_fpg / sblock.fs_frag, sblock.fs_ipg);
        if (sblock.fs_flags & FS_DOSOFTDEP)
@@ -217,13 +217,13 @@ growfs(int fsi, int fso, unsigned int Nf
        /*
         * Iterate for only the new cylinder groups.
         */
-       for (cylno = osblock.fs_ncg; cylno < sblock.fs_ncg; cylno++) {
-               initcg(cylno, utime, fso, Nflag);
+       for (cg = osblock.fs_ncg; cg < sblock.fs_ncg; cg++) {
+               initcg(cg, utime, fso, Nflag);
                if (quiet)
                        continue;
                j = snprintf(tmpbuf, sizeof(tmpbuf), " %lld%s",
-                   fsbtodb(&sblock, cgsblock(&sblock, cylno)),
-                   cylno < (sblock.fs_ncg - 1) ? "," : "");
+                   fsbtodb(&sblock, cgsblock(&sblock, cg)),
+                   cg < (sblock.fs_ncg - 1) ? "," : "");
                if (j >= sizeof(tmpbuf))
                        j = sizeof(tmpbuf) - 1;
                if (j < 0 || i + j >= colwidth) {
@@ -310,8 +310,8 @@ growfs(int fsi, int fso, unsigned int Nf
        /*
         * Write out the duplicate superblocks.
         */
-       for (cylno = 0; cylno < sblock.fs_ncg; cylno++) {
-               wtfs(fsbtodb(&sblock, cgsblock(&sblock, cylno)),
+       for (cg = 0; cg < sblock.fs_ncg; cg++) {
+               wtfs(fsbtodb(&sblock, cgsblock(&sblock, cg)),
                    (size_t)SBLOCKSIZE, (void *)&sblock, fso, Nflag);
        }
 }
@@ -323,7 +323,7 @@ growfs(int fsi, int fso, unsigned int Nf
  * provisions for that case are removed here.
  */
 static void
-initcg(int cylno, time_t utime, int fso, unsigned int Nflag)
+initcg(u_int cg, time_t utime, int fso, unsigned int Nflag)
 {
        static char *iobuf;
        daddr_t d, dlower, dupper, blkno, start;
@@ -348,19 +348,19 @@ initcg(int cylno, time_t utime, int fso,
         * Allow space for super block summary information in first
         * cylinder group.
         */
-       cbase = cgbase(&sblock, cylno);
+       cbase = cgbase(&sblock, cg);
        dmax = cbase + sblock.fs_fpg;
        if (dmax > sblock.fs_size)
                dmax = sblock.fs_size;
-       dlower = cgsblock(&sblock, cylno) - cbase;
-       dupper = cgdmin(&sblock, cylno) - cbase;
-       if (cylno == 0) /* XXX fscs may be relocated */
+       dlower = cgsblock(&sblock, cg) - cbase;
+       dupper = cgdmin(&sblock, cg) - cbase;
+       if (cg == 0) /* XXX fscs may be relocated */
                dupper += howmany(sblock.fs_cssize, sblock.fs_fsize);
-       cs = &fscs[cylno];
+       cs = &fscs[cg];
        memset(&acg, 0, sblock.fs_cgsize);
        acg.cg_ffs2_time = utime;
        acg.cg_magic = CG_MAGIC;
-       acg.cg_cgx = cylno;
+       acg.cg_cgx = cg;
        acg.cg_ffs2_niblk = sblock.fs_ipg;
        acg.cg_initediblk = MINIMUM(sblock.fs_ipg, 2 * INOPB(&sblock));
        acg.cg_ndblk = dmax - cbase;
@@ -370,7 +370,7 @@ initcg(int cylno, time_t utime, int fso,
        if (sblock.fs_magic == FS_UFS2_MAGIC) {
                acg.cg_iusedoff = start;
        } else {
-               if (cylno == sblock.fs_ncg - 1)
+               if (cg == sblock.fs_ncg - 1)
                        acg.cg_ncyl = sblock.fs_ncyl % sblock.fs_cpg;
                else
                        acg.cg_ncyl = sblock.fs_cpg;
@@ -404,15 +404,15 @@ initcg(int cylno, time_t utime, int fso,
                errx(37, "panic: cylinder group too big");
        }
        acg.cg_cs.cs_nifree += sblock.fs_ipg;
-       if (cylno == 0) {
+       if (cg == 0) {
                for (i = 0; i < ROOTINO; i++) {
                        setbit(cg_inosused(&acg), i);
                        acg.cg_cs.cs_nifree--;
                }
        }
-       if (cylno > 0) {
+       if (cg > 0) {
                /*
-                * In cylno 0, beginning space is reserved
+                * In cg 0, beginning space is reserved
                 * for boot and super blocks.
                 */
                for (d = 0; d < dlower; d += sblock.fs_frag) {
@@ -501,7 +501,7 @@ initcg(int cylno, time_t utime, int fso,
                        dp2++;
                }
        }
-       wtfs(fsbtodb(&sblock, cgsblock(&sblock, cylno)), iobufsize,
+       wtfs(fsbtodb(&sblock, cgsblock(&sblock, cg)), iobufsize,
            iobuf, fso, Nflag);
 
        /* Initialize inodes for FFS1. */
@@ -513,7 +513,7 @@ initcg(int cylno, time_t utime, int fso,
                                dp1->di_gen = arc4random();
                                dp1++;
                        }
-                       wtfs(fsbtodb(&sblock, cgimin(&sblock, cylno) + i),
+                       wtfs(fsbtodb(&sblock, cgimin(&sblock, cg) + i),
                            (size_t)sblock.fs_bsize, &iobuf[start], fso, Nflag);
                }
        }
@@ -626,7 +626,7 @@ cond_bl_upd(daddr_t *block, struct gfs_b
  * tables and cluster summary during all those operations.
  */
 static void
-updjcg(int cylno, time_t utime, int fsi, int fso, unsigned int Nflag)
+updjcg(u_int cg, time_t utime, int fsi, int fso, unsigned int Nflag)
 {
        daddr_t cbase, dmax, dupper;
        struct csum     *cs;
@@ -637,7 +637,7 @@ updjcg(int cylno, time_t utime, int fsi,
         * Read the former last (joining) cylinder group from disk, and make
         * a copy.
         */
-       rdfs(fsbtodb(&osblock, cgtod(&osblock, cylno)),
+       rdfs(fsbtodb(&osblock, cgtod(&osblock, cg)),
            (size_t)osblock.fs_cgsize, (void *)&aocg, fsi);
 
        memcpy(&cgun1, &cgun2, sizeof(cgun2));
@@ -649,11 +649,11 @@ updjcg(int cylno, time_t utime, int fsi,
         * to  be  zero instead of fs_cpg. As this is now no longer  the  last
         * cylinder group we have to change that value now to fs_cpg.
         */
-       if (cgbase(&osblock, cylno+1) == osblock.fs_size) {
+       if (cgbase(&osblock, cg+1) == osblock.fs_size) {
                if (sblock.fs_magic == FS_UFS1_MAGIC)
                        acg.cg_ncyl = sblock.fs_cpg;
 
-               wtfs(fsbtodb(&sblock, cgtod(&sblock, cylno)),
+               wtfs(fsbtodb(&sblock, cgtod(&sblock, cg)),
                    (size_t)sblock.fs_cgsize, (void *)&acg, fso, Nflag);
 
                return;
@@ -662,18 +662,18 @@ updjcg(int cylno, time_t utime, int fsi,
        /*
         * Set up some variables needed later.
         */
-       cbase = cgbase(&sblock, cylno);
+       cbase = cgbase(&sblock, cg);
        dmax = cbase + sblock.fs_fpg;
        if (dmax > sblock.fs_size)
                dmax = sblock.fs_size;
-       dupper = cgdmin(&sblock, cylno) - cbase;
-       if (cylno == 0) /* XXX fscs may be relocated */
+       dupper = cgdmin(&sblock, cg) - cbase;
+       if (cg == 0)    /* XXX fscs may be relocated */
                dupper += howmany(sblock.fs_cssize, sblock.fs_fsize);
 
        /*
         * Set pointer to the cylinder summary for our cylinder group.
         */
-       cs = fscs + cylno;
+       cs = fscs + cg;
 
        /*
         * Touch the cylinder group, update all fields in the cylinder group as
@@ -681,7 +681,7 @@ updjcg(int cylno, time_t utime, int fsi,
         */
        acg.cg_time = utime;
        if (sblock.fs_magic == FS_UFS1_MAGIC) {
-               if (cylno == sblock.fs_ncg - 1) {
+               if (cg == sblock.fs_ncg - 1) {
                        /*
                         * This is still the last cylinder group.
                         */
@@ -727,7 +727,7 @@ updjcg(int cylno, time_t utime, int fsi,
                         * filesystem.
                         */
                        if (isblock(&sblock, cg_blksfree(&acg),
-                           ((osblock.fs_size - cgbase(&sblock, cylno))/
+                           ((osblock.fs_size - cgbase(&sblock, cg))/
                            sblock.fs_frag))) {
                                /*
                                 * The block is now completely available.
@@ -822,7 +822,7 @@ updjcg(int cylno, time_t utime, int fsi,
        /*
         * Write the updated "joining" cylinder group back to disk.
         */
-       wtfs(fsbtodb(&sblock, cgtod(&sblock, cylno)), (size_t)sblock.fs_cgsize,
+       wtfs(fsbtodb(&sblock, cgtod(&sblock, cg)), (size_t)sblock.fs_cgsize,
            (void *)&acg, fso, Nflag);
 }
 
@@ -850,7 +850,7 @@ updcsloc(time_t utime, int fsi, int fso,
        int     blocks;
        daddr_t cbase, dupper, odupper, d, f, g;
        int     ind;
-       int     cylno, inc;
+       u_int   cg, inc;
        struct gfs_bpp  *bp;
        int     i, l;
        int     lcs = 0;
@@ -1337,9 +1337,9 @@ updcsloc(time_t utime, int fsi, int fso,
                 * cylinder  groups,  within those over all non  zero  length
                 * inodes.
                 */
-               for (cylno = 0; cylno < osblock.fs_ncg; cylno++) {
+               for (cg = 0; cg < osblock.fs_ncg; cg++) {
                        for (inc = osblock.fs_ipg - 1; inc > 0; inc--) {
-                               updrefs(cylno, (ino_t)inc, bp, fsi, fso, Nflag);
+                               updrefs(cg, (ino_t)inc, bp, fsi, fso, Nflag);
                        }
                }
 
@@ -1906,6 +1906,8 @@ main(int argc, char **argv)
                sblock.fs_ncyl++;
        }
        sblock.fs_ncg = howmany(sblock.fs_size, sblock.fs_fpg);
+       if ((ino_t)sblock.fs_ncg * sblock.fs_ipg > UINT_MAX)
+               errx(1, "more than 2^32 inodes requested");
        maxino = sblock.fs_ncg * sblock.fs_ipg;
 
        if (sblock.fs_size % sblock.fs_fpg != 0 &&
Index: sbin/newfs/mkfs.c
===================================================================
RCS file: /cvs/src/sbin/newfs/mkfs.c,v
retrieving revision 1.99
diff -u -p -r1.99 mkfs.c
--- sbin/newfs/mkfs.c   19 May 2020 12:48:54 -0000      1.99
+++ sbin/newfs/mkfs.c   26 May 2020 09:41:18 -0000
@@ -131,7 +131,7 @@ static long iobufsize;
 daddr_t        alloc(int, int);
 static int     charsperline(void);
 static int     ilog2(int);
-void           initcg(int, time_t);
+void           initcg(u_int, time_t);
 void           wtfs(daddr_t, int, void *);
 int            fsinit1(time_t, mode_t, uid_t, gid_t);
 int            fsinit2(time_t, mode_t, uid_t, gid_t);
@@ -170,7 +170,8 @@ mkfs(struct partition *pp, char *fsys, i
        int i, j, width, origdensity, fragsperinode, minfpg, optimalfpg;
        int lastminfpg, mincylgrps;
        uint32_t bpg;
-       long cylno, csfrags;
+       long csfrags;
+       u_int cg;
        char tmpbuf[100];       /* XXX this will break in about 2,500 years */
 
        if ((fsun = calloc(1, sizeof (union fs_u))) == NULL ||
@@ -427,6 +428,10 @@ mkfs(struct partition *pp, char *fsys, i
                    " to %d to enlarge last cylinder group", optimalfpg,
                    sblock.fs_fpg);
 
+       if ((ino_t)sblock.fs_ipg * sblock.fs_ncg >  UINT_MAX)
+               errx(42, "more than 2^32 inodes, increase density, block or "
+                   "fragment size");
+
        /*
         * Back to filling superblock fields.
         */
@@ -498,7 +503,7 @@ mkfs(struct partition *pp, char *fsys, i
                    (float)sblock.fs_size * sblock.fs_fsize * B2MBFACTOR,
                    (intmax_t)fsbtodb(&sblock, sblock.fs_size) /
                    (sectorsize / DEV_BSIZE), sectorsize);
-               printf("%d cylinder groups of %.2fMB, %d blocks, %d"
+               printf("%u cylinder groups of %.2fMB, %d blocks, %u"
                    " inodes each\n", sblock.fs_ncg,
                    (float)sblock.fs_fpg * sblock.fs_fsize * B2MBFACTOR,
                    sblock.fs_fpg / sblock.fs_frag, sblock.fs_ipg);
@@ -558,13 +563,13 @@ mkfs(struct partition *pp, char *fsys, i
         * writing out in each cylinder group.
         */
        bcopy((char *)&sblock, iobuf, SBLOCKSIZE);
-       for (cylno = 0; cylno < sblock.fs_ncg; cylno++) {
-               cur_cylno = (sig_atomic_t)cylno;
-               initcg(cylno, utime);
+       for (cg = 0; cg < sblock.fs_ncg; cg++) {
+               cur_cylno = (sig_atomic_t)cg;
+               initcg(cg, utime);
                if (quiet)
                        continue;
                j = snprintf(tmpbuf, sizeof tmpbuf, " %lld,",
-                   (long long)fsbtodb(&sblock, cgsblock(&sblock, cylno)));
+                   (long long)fsbtodb(&sblock, cgsblock(&sblock, cg)));
                if (j >= sizeof tmpbuf)
                        j = sizeof tmpbuf - 1;
                if (j < 0 || i+j >= width) {
@@ -619,9 +624,9 @@ mkfs(struct partition *pp, char *fsys, i
  * Initialize a cylinder group.
  */
 void
-initcg(int cylno, time_t utime)
+initcg(u_int cg, time_t utime)
 {
-       int i, j, d, dlower, dupper, blkno, start;
+       u_int i, j, d, dlower, dupper, blkno, start;
        daddr_t cbase, dmax;
        struct ufs1_dinode *dp1;
        struct ufs2_dinode *dp2;
@@ -631,23 +636,23 @@ initcg(int cylno, time_t utime)
         * Determine block bounds for cylinder group.  Allow space for
         * super block summary information in first cylinder group.
         */
-       cbase = cgbase(&sblock, cylno);
+       cbase = cgbase(&sblock, cg);
        dmax = cbase + sblock.fs_fpg;
        if (dmax > sblock.fs_size)
                dmax = sblock.fs_size;
-       if (fsbtodb(&sblock, cgsblock(&sblock, cylno)) + iobufsize / DEV_BSIZE 
+       if (fsbtodb(&sblock, cgsblock(&sblock, cg)) + iobufsize / DEV_BSIZE 
            > fssize)
                errx(40, "inode table does not fit in cylinder group");
 
-       dlower = cgsblock(&sblock, cylno) - cbase;
-       dupper = cgdmin(&sblock, cylno) - cbase;
-       if (cylno == 0)
+       dlower = cgsblock(&sblock, cg) - cbase;
+       dupper = cgdmin(&sblock, cg) - cbase;
+       if (cg == 0)
                dupper += howmany(sblock.fs_cssize, sblock.fs_fsize);
-       cs = &fscs[cylno];
+       cs = &fscs[cg];
        memset(&acg, 0, sblock.fs_cgsize);
        acg.cg_ffs2_time = utime;
        acg.cg_magic = CG_MAGIC;
-       acg.cg_cgx = cylno;
+       acg.cg_cgx = cg;
        acg.cg_ffs2_niblk = sblock.fs_ipg;
        acg.cg_initediblk = MINIMUM(sblock.fs_ipg, 2 * INOPB(&sblock));
        acg.cg_ndblk = dmax - cbase;
@@ -655,7 +660,7 @@ initcg(int cylno, time_t utime)
        start = sizeof(struct cg);
        if (Oflag <= 1) {
                /* Hack to maintain compatibility with old fsck. */
-               if (cylno == sblock.fs_ncg - 1)
+               if (cg == sblock.fs_ncg - 1)
                        acg.cg_ncyl = 0;
                else
                        acg.cg_ncyl = sblock.fs_cpg;
@@ -675,18 +680,18 @@ initcg(int cylno, time_t utime)
        acg.cg_freeoff = acg.cg_iusedoff + howmany(sblock.fs_ipg, CHAR_BIT);
        acg.cg_nextfreeoff = acg.cg_freeoff + howmany(sblock.fs_fpg, CHAR_BIT);
        if (acg.cg_nextfreeoff > sblock.fs_cgsize)
-               errx(37, "panic: cylinder group too big: %d > %d",
+               errx(37, "panic: cylinder group too big: %u > %d",
                    acg.cg_nextfreeoff, sblock.fs_cgsize);
        acg.cg_cs.cs_nifree += sblock.fs_ipg;
-       if (cylno == 0) {
+       if (cg == 0) {
                for (i = 0; i < ROOTINO; i++) {
                        setbit(cg_inosused(&acg), i);
                        acg.cg_cs.cs_nifree--;
                }
        }
-       if (cylno > 0) {
+       if (cg > 0) {
                /*
-                * In cylno 0, space is reserved for boot and super blocks.
+                * In cg 0, space is reserved for boot and super blocks.
                 */
                for (d = 0; d < dlower; d += sblock.fs_frag) {
                        blkno = d / sblock.fs_frag;
@@ -732,6 +737,10 @@ initcg(int cylno, time_t utime)
         * and two blocks worth of inodes in a single write.
         */
        start = sblock.fs_bsize > SBLOCKSIZE ? sblock.fs_bsize : SBLOCKSIZE;
+
+       if (cg == 0 && acg.cg_cs.cs_nbfree == 0)
+               errx(42, "cg 0: summary info is too large to fit");
+
        bcopy((char *)&acg, &iobuf[start], sblock.fs_cgsize);
        start += sblock.fs_bsize;
        dp1 = (struct ufs1_dinode *)(&iobuf[start]);
@@ -745,7 +754,7 @@ initcg(int cylno, time_t utime)
                        dp2++;
                }
        }
-       wtfs(fsbtodb(&sblock, cgsblock(&sblock, cylno)), iobufsize, iobuf);
+       wtfs(fsbtodb(&sblock, cgsblock(&sblock, cg)), iobufsize, iobuf);
 
        if (Oflag <= 1) {
                /* Initialize inodes for FFS1. */
@@ -757,7 +766,7 @@ initcg(int cylno, time_t utime)
                                dp1->di_gen = (u_int32_t)arc4random();
                                dp1++;
                        }
-                       wtfs(fsbtodb(&sblock, cgimin(&sblock, cylno) + i),
+                       wtfs(fsbtodb(&sblock, cgimin(&sblock, cg) + i),
                            sblock.fs_bsize, &iobuf[start]);
                }
        }
Index: sys/ufs/ffs/ffs_alloc.c
===================================================================
RCS file: /cvs/src/sys/ufs/ffs/ffs_alloc.c,v
retrieving revision 1.110
diff -u -p -r1.110 ffs_alloc.c
--- sys/ufs/ffs/ffs_alloc.c     21 Feb 2020 11:13:55 -0000      1.110
+++ sys/ufs/ffs/ffs_alloc.c     26 May 2020 09:41:20 -0000
@@ -63,14 +63,14 @@
            (fs)->fs_fsmnt, (cp));                              \
 } while (0)
 
-daddr_t                ffs_alloccg(struct inode *, int, daddr_t, int);
-struct buf *   ffs_cgread(struct fs *, struct inode *, int);
+daddr_t                ffs_alloccg(struct inode *, u_int, daddr_t, int);
+struct buf *   ffs_cgread(struct fs *, struct inode *, u_int);
 daddr_t                ffs_alloccgblk(struct inode *, struct buf *, daddr_t);
 ufsino_t       ffs_dirpref(struct inode *);
-daddr_t                ffs_fragextend(struct inode *, int, daddr_t, int, int);
-daddr_t                ffs_hashalloc(struct inode *, int, daddr_t, int,
-                   daddr_t (*)(struct inode *, int, daddr_t, int));
-daddr_t                ffs_nodealloccg(struct inode *, int, daddr_t, int);
+daddr_t                ffs_fragextend(struct inode *, u_int, daddr_t, int, 
int);
+daddr_t                ffs_hashalloc(struct inode *, u_int, daddr_t, int,
+                   daddr_t (*)(struct inode *, u_int, daddr_t, int));
+daddr_t                ffs_nodealloccg(struct inode *, u_int, daddr_t, int);
 daddr_t                ffs_mapsearch(struct fs *, struct cg *, daddr_t, int);
 
 static const struct timeval    fserr_interval = { 2, 0 };
@@ -102,7 +102,7 @@ ffs_alloc(struct inode *ip, daddr_t lbn,
        static struct timeval fsfull_last;
        struct fs *fs;
        daddr_t bno;
-       int cg;
+       u_int cg;
        int error;
 
        *bnp = 0;
@@ -174,7 +174,8 @@ ffs_realloccg(struct inode *ip, daddr_t 
        struct fs *fs;
        struct buf *bp = NULL;
        daddr_t quota_updated = 0;
-       int cg, request, error;
+       int request, error;
+       u_int cg;
        daddr_t bprev, bno;
 
        if (bpp != NULL)
@@ -360,7 +361,8 @@ ffs_inode_alloc(struct inode *pip, mode_
        struct fs *fs;
        struct inode *ip;
        ufsino_t ino, ipref;
-       int cg, error;
+       u_int cg;
+       int error;
 
        *vpp = NULL;
        fs = pip->i_fs;
@@ -452,11 +454,12 @@ ufsino_t
 ffs_dirpref(struct inode *pip)
 {
        struct fs *fs;
-       int     cg, prefcg, dirsize, cgsize;
-       int     avgifree, avgbfree, avgndir, curdirsize;
-       int     minifree, minbfree, maxndir;
-       int     mincg, minndir;
-       int     maxcontigdirs;
+       u_int   cg, prefcg;
+       u_int   dirsize, cgsize;
+       u_int   avgifree, avgbfree, avgndir, curdirsize;
+       u_int   minifree, minbfree, maxndir;
+       u_int   mincg, minndir;
+       u_int   maxcontigdirs;
 
        fs = pip->i_fs;
 
@@ -518,7 +521,7 @@ ffs_dirpref(struct inode *pip)
                maxcontigdirs = 1;
 
        /*
-        * Limit number of dirs in one cg and reserve space for 
+        * Limit number of dirs in one cg and reserve space for
         * regular files, but only if we have no deficit in
         * inodes or space.
         *
@@ -527,16 +530,17 @@ ffs_dirpref(struct inode *pip)
         * We scan from our preferred cylinder group forward looking
         * for a cylinder group that meets our criterion. If we get
         * to the final cylinder group and do not find anything,
-        * we start scanning backwards from our preferred cylinder
-        * group. The ideal would be to alternate looking forward
-        * and backward, but tha tis just too complex to code for
-        * the gain it would get. The most likely place where the
-        * backward scan would take effect is when we start near
-        * the end of the filesystem and do not find anything from
-        * where we are to the end. In that case, scanning backward
-        * will likely find us a suitable cylinder group much closer
-        * to our desired location than if we were to start scanning
-        * forward from the beginning for the filesystem.
+        * we start scanning forwards from the beginning of the
+        * filesystem. While it might seem sensible to start scanning
+        * backwards or even to alternate looking forward and backward,
+        * this approach fails badly when the filesystem is nearly full.
+        * Specifically, we first search all the areas that have no space
+        * and finally try the one preceding that. We repeat this on
+        * every request and in the case of the final block end up
+        * searching the entire filesystem. By jumping to the front
+        * of the filesystem, our future forward searches always look
+        * in new cylinder groups so finds every possible block after
+        * one pass over the filesystem.
         */
        for (cg = prefcg; cg < fs->fs_ncg; cg++)
                if (fs->fs_cs(fs, cg).cs_ndir < maxndir &&
@@ -545,7 +549,7 @@ ffs_dirpref(struct inode *pip)
                        if (fs->fs_contigdirs[cg] < maxcontigdirs)
                                goto end;
                }
-       for (cg = prefcg - 1; cg >= 0; cg--)
+       for (cg = 0; cg < prefcg; cg++)
                if (fs->fs_cs(fs, cg).cs_ndir < maxndir &&
                    fs->fs_cs(fs, cg).cs_nifree >= minifree &&
                    fs->fs_cs(fs, cg).cs_nbfree >= minbfree) {
@@ -558,7 +562,7 @@ ffs_dirpref(struct inode *pip)
        for (cg = prefcg; cg < fs->fs_ncg; cg++)
                if (fs->fs_cs(fs, cg).cs_nifree >= avgifree)
                        goto end;
-       for (cg = prefcg - 1; cg >= 0; cg--)
+       for (cg = 0; cg < prefcg; cg++)
                if (fs->fs_cs(fs, cg).cs_nifree >= avgifree)
                        goto end;
 end:
@@ -594,7 +598,8 @@ int32_t
 ffs1_blkpref(struct inode *ip, daddr_t lbn, int indx, int32_t *bap)
 {
        struct fs *fs;
-       int cg, inocg, avgbfree, startcg;
+       u_int cg, inocg;
+       u_int avgbfree, startcg;
        uint32_t pref;
 
        KASSERT(indx <= 0 || bap != NULL);
@@ -694,7 +699,8 @@ int64_t
 ffs2_blkpref(struct inode *ip, daddr_t lbn, int indx, int64_t *bap)
 {
        struct fs *fs;
-       int cg, inocg, avgbfree, startcg;
+       u_int cg, inocg;
+       u_int avgbfree, startcg;
        uint64_t pref;
 
        KASSERT(indx <= 0 || bap != NULL);
@@ -798,12 +804,12 @@ ffs2_blkpref(struct inode *ip, daddr_t l
  *   3) brute force search for a free block.
  */
 daddr_t
-ffs_hashalloc(struct inode *ip, int cg, daddr_t pref, int size,
-    daddr_t (*allocator)(struct inode *, int, daddr_t, int))
+ffs_hashalloc(struct inode *ip, u_int cg, daddr_t pref, int size,
+    daddr_t (*allocator)(struct inode *, u_int, daddr_t, int))
 {
        struct fs *fs;
        daddr_t result;
-       int i, icg = cg;
+       u_int i, icg = cg;
 
        fs = ip->i_fs;
        /*
@@ -841,7 +847,7 @@ ffs_hashalloc(struct inode *ip, int cg, 
 }
 
 struct buf *
-ffs_cgread(struct fs *fs, struct inode *ip, int cg)
+ffs_cgread(struct fs *fs, struct inode *ip, u_int cg)
 {
        struct buf *bp;
 
@@ -866,7 +872,7 @@ ffs_cgread(struct fs *fs, struct inode *
  * if they are, allocate them.
  */
 daddr_t
-ffs_fragextend(struct inode *ip, int cg, daddr_t bprev, int osize, int nsize)
+ffs_fragextend(struct inode *ip, u_int cg, daddr_t bprev, int osize, int nsize)
 {
        struct fs *fs;
        struct cg *cgp;
@@ -932,7 +938,7 @@ ffs_fragextend(struct inode *ip, int cg,
  * and if it is, allocate it.
  */
 daddr_t
-ffs_alloccg(struct inode *ip, int cg, daddr_t bpref, int size)
+ffs_alloccg(struct inode *ip, u_int cg, daddr_t bpref, int size)
 {
        struct fs *fs;
        struct cg *cgp;
@@ -1087,7 +1093,7 @@ gotit:
 
 /* inode allocation routine */
 daddr_t
-ffs_nodealloccg(struct inode *ip, int cg, daddr_t ipref, int mode)
+ffs_nodealloccg(struct inode *ip, u_int cg, daddr_t ipref, int mode)
 {
        struct fs *fs;
        struct cg *cgp;
@@ -1380,10 +1386,10 @@ ffs_freefile(struct inode *pip, ufsino_t
        struct cg *cgp;
        struct buf *bp;
        struct timespec now;
-       int cg;
+       u_int cg;
 
        fs = pip->i_fs;
-       if ((u_int)ino >= fs->fs_ipg * fs->fs_ncg)
+       if (ino >= fs->fs_ipg * fs->fs_ncg)
                panic("ffs_freefile: range: dev = 0x%x, ino = %d, fs = %s",
                    pip->i_dev, ino, fs->fs_fsmnt);
 
Index: sys/ufs/ffs/fs.h
===================================================================
RCS file: /cvs/src/sys/ufs/ffs/fs.h,v
retrieving revision 1.42
diff -u -p -r1.42 fs.h
--- sys/ufs/ffs/fs.h    27 Nov 2016 13:27:55 -0000      1.42
+++ sys/ufs/ffs/fs.h    26 May 2020 09:41:20 -0000
@@ -202,7 +202,7 @@ struct fs {
        int32_t  fs_ffs1_time;          /* last time written */
        int32_t  fs_ffs1_size;          /* # of blocks in fs / frags */
        int32_t  fs_ffs1_dsize;         /* # of data blocks in fs */
-       int32_t  fs_ncg;                /* # of cylinder groups */
+       u_int32_t fs_ncg;               /* # of cylinder groups */
        int32_t  fs_bsize;              /* size of basic blocks / bytes */
        int32_t  fs_fsize;              /* size of frag blocks / bytes */
        int32_t  fs_frag;               /* # of frags in a block in fs */
@@ -225,7 +225,7 @@ struct fs {
        int32_t  fs_csmask;             /* csum block offset (now unused) */
        int32_t  fs_csshift;            /* csum block number (now unused) */
        int32_t  fs_nindir;             /* value of NINDIR */
-       int32_t  fs_inopb;              /* inodes per file system block */
+       u_int32_t fs_inopb;             /* inodes per file system block */
        int32_t  fs_nspf;               /* DEV_BSIZE sectors per frag */
 /* yet another configuration parameter */
        int32_t  fs_optim;              /* optimization preference, see below */
@@ -247,7 +247,7 @@ struct fs {
        int32_t  fs_ncyl;               /* cylinders in file system */
 /* these fields can be computed from the others */
        int32_t  fs_cpg;                /* cylinders per group */
-       int32_t  fs_ipg;                /* inodes per group */
+       u_int32_t fs_ipg;               /* inodes per group */
        int32_t  fs_fpg;                /* blocks per group * fs_frag */
 /* this data must be re-computed after crashes */
        struct  csum fs_ffs1_cstotal;   /* cylinder summary information */
@@ -278,11 +278,11 @@ struct fs {
        int64_t  fs_dsize;              /* number of data blocks in fs */
        int64_t  fs_csaddr;             /* blk addr of cyl grp summary area */
        int64_t  fs_pendingblocks;      /* blocks in process of being freed */
-       int32_t  fs_pendinginodes;      /* inodes in process of being freed */
-       int32_t  fs_snapinum[FSMAXSNAP];/* space reserved for snapshots */
+       u_int32_t fs_pendinginodes;     /* inodes in process of being freed */
+       u_int32_t fs_snapinum[FSMAXSNAP];/* space reserved for snapshots */
 /* back to stuff that has been around a while */
-       int32_t  fs_avgfilesize;        /* expected average file size */
-       int32_t  fs_avgfpdir;           /* expected # of files per directory */
+       u_int32_t fs_avgfilesize;       /* expected average file size */
+       u_int32_t fs_avgfpdir;          /* expected # of files per directory */
        int32_t  fs_sparecon[26];       /* reserved for future constants */
        u_int32_t fs_flags;             /* see FS_ flags below */
        int32_t  fs_fscktime;           /* last time fsck(8)ed */
@@ -377,25 +377,25 @@ struct cg {
        int32_t  cg_firstfield;         /* historic cyl groups linked list */
        int32_t  cg_magic;              /* magic number */
        int32_t  cg_time;               /* time last written */
-       int32_t  cg_cgx;                /* we are the cgx'th cylinder group */
+       u_int32_t cg_cgx;               /* we are the cgx'th cylinder group */
        int16_t  cg_ncyl;               /* number of cyl's this cg */
        int16_t  cg_niblk;              /* number of inode blocks this cg */
-       int32_t  cg_ndblk;              /* number of data blocks this cg */
+       u_int32_t cg_ndblk;             /* number of data blocks this cg */
        struct  csum cg_cs;             /* cylinder summary information */
-       int32_t  cg_rotor;              /* position of last used block */
-       int32_t  cg_frotor;             /* position of last used frag */
-       int32_t  cg_irotor;             /* position of last used inode */
-       int32_t  cg_frsum[MAXFRAG];     /* counts of available frags */
+       u_int32_t cg_rotor;             /* position of last used block */
+       u_int32_t cg_frotor;            /* position of last used frag */
+       u_int32_t cg_irotor;            /* position of last used inode */
+       u_int32_t cg_frsum[MAXFRAG];    /* counts of available frags */
        int32_t  cg_btotoff;            /* (int32) block totals per cylinder */
        int32_t  cg_boff;               /* (u_int16) free block positions */
-       int32_t  cg_iusedoff;           /* (u_int8) used inode map */
-       int32_t  cg_freeoff;            /* (u_int8) free block map */
-       int32_t  cg_nextfreeoff;        /* (u_int8) next available space */
-       int32_t  cg_clustersumoff;      /* (u_int32) counts of avail clusters */
-       int32_t  cg_clusteroff;         /* (u_int8) free cluster map */
-       int32_t  cg_nclusterblks;       /* number of clusters this cg */
-       int32_t  cg_ffs2_niblk;         /* number of inode blocks this cg */
-       int32_t  cg_initediblk;         /* last initialized inode */
+       u_int32_t cg_iusedoff;          /* (u_int8) used inode map */
+       u_int32_t cg_freeoff;           /* (u_int8) free block map */
+       u_int32_t cg_nextfreeoff;       /* (u_int8) next available space */
+       u_int32_t cg_clustersumoff;     /* (u_int32) counts of avail clusters */
+       u_int32_t cg_clusteroff;        /* (u_int8) free cluster map */
+       u_int32_t cg_nclusterblks;      /* number of clusters this cg */
+       u_int32_t cg_ffs2_niblk;        /* number of inode blocks this cg */
+       u_int32_t cg_initediblk;        /* last initialized inode */
        int32_t  cg_sparecon32[3];      /* reserved for future use */
        int64_t  cg_ffs2_time;          /* time last written */
        int64_t  cg_sparecon64[3];      /* reserved for future use */

Reply via email to