On Sat, Apr 23, 2011 at 12:52:46PM +0200, Otto Moerbeek wrote:
> Little feedback on this,
> 
> If you have good reasons to keep the ability to convert and/or check
> (very) old ffs on-disk formats, speak up now. 
> 
>       -Otto

Let the old crap molder in the grave and not disturb us. If you want
to access such filesystem you should have preserved a working
hardware/software environment from the same era. :-)

.... Ken

> 
> On Mon, Apr 18, 2011 at 12:03:38PM +0200, Otto Moerbeek wrote:
> 
> > Hi,
> > 
> > this removes the support to check and convert (very) old incarnations
> > of ffs.  This old code makes diffing to fsck_ffs in freebsd harder. 
> > 
> > We use and old filesystem in one place (the vax boot image), but that
> > image does not need checking, and even Miod is not sure it's actually
> > needed for the vaxen we support.
> > 
> >     -Otto
> > 
> > Index: dir.c
> > ===================================================================
> > RCS file: /cvs/src/sbin/fsck_ffs/dir.c,v
> > retrieving revision 1.25
> > diff -u -p -r1.25 dir.c
> > --- dir.c   16 Apr 2011 16:37:21 -0000      1.25
> > +++ dir.c   17 Apr 2011 11:19:00 -0000
> > @@ -115,29 +115,8 @@ dirscan(struct inodesc *idesc)
> >     for (dp = fsck_readdir(idesc); dp != NULL; dp = fsck_readdir(idesc)) {
> >             dsize = dp->d_reclen;
> >             memcpy(dbuf, dp, (size_t)dsize);
> > -#          if (BYTE_ORDER == LITTLE_ENDIAN)
> > -                   if (!newinofmt) {
> > -                           struct direct *tdp = (struct direct *)dbuf;
> > -                           u_char tmp;
> > -
> > -                           tmp = tdp->d_namlen;
> > -                           tdp->d_namlen = tdp->d_type;
> > -                           tdp->d_type = tmp;
> > -                   }
> > -#          endif
> >             idesc->id_dirp = (struct direct *)dbuf;
> >             if ((n = (*idesc->id_func)(idesc)) & ALTERED) {
> > -#                  if (BYTE_ORDER == LITTLE_ENDIAN)
> > -                           if (!newinofmt && !doinglevel2) {
> > -                                   struct direct *tdp;
> > -                                   u_char tmp;
> > -
> > -                                   tdp = (struct direct *)dbuf;
> > -                                   tmp = tdp->d_namlen;
> > -                                   tdp->d_namlen = tdp->d_type;
> > -                                   tdp->d_type = tmp;
> > -                           }
> > -#                  endif
> >                     bp = getdirblk(idesc->id_blkno, blksiz);
> >                     memcpy(bp->b_un.b_buf + idesc->id_loc - dsize, dbuf,
> >                         (size_t)dsize);
> > @@ -230,19 +209,9 @@ dircheck(struct inodesc *idesc, struct d
> >             return (0);
> >     if (dp->d_ino == 0)
> >             return (1);
> > -   size = DIRSIZ(!newinofmt, dp);
> > -#  if (BYTE_ORDER == LITTLE_ENDIAN)
> > -           if (!newinofmt) {
> > -                   type = dp->d_namlen;
> > -                   namlen = dp->d_type;
> > -           } else {
> > -                   namlen = dp->d_namlen;
> > -                   type = dp->d_type;
> > -           }
> > -#  else
> > -           namlen = dp->d_namlen;
> > -           type = dp->d_type;
> > -#  endif
> > +   size = DIRSIZ(0, dp);
> > +   namlen = dp->d_namlen;
> > +   type = dp->d_type;
> >     if (dp->d_reclen < size ||
> >         idesc->id_filesize < size ||
> >         type > 15)
> > @@ -334,27 +303,9 @@ mkentry(struct inodesc *idesc)
> >     dirp = (struct direct *)(((char *)dirp) + oldlen);
> >     dirp->d_ino = idesc->id_parent; /* ino to be entered is in id_parent */
> >     dirp->d_reclen = newent.d_reclen;
> > -   if (newinofmt)
> > -           dirp->d_type = GET_ITYPE(idesc->id_parent);
> > -   else
> > -           dirp->d_type = 0;
> > +   dirp->d_type = GET_ITYPE(idesc->id_parent);
> >     dirp->d_namlen = newent.d_namlen;
> >     memcpy(dirp->d_name, idesc->id_name, (size_t)dirp->d_namlen + 1);
> > -#  if (BYTE_ORDER == LITTLE_ENDIAN)
> > -           /*
> > -            * If the entry was split, dirscan() will only reverse the byte
> > -            * order of the original entry, and not the new one, before
> > -            * writing it back out.  So, we reverse the byte order here if
> > -            * necessary.
> > -            */
> > -           if (oldlen != 0 && !newinofmt && !doinglevel2) {
> > -                   u_char tmp;
> > -
> > -                   tmp = dirp->d_namlen;
> > -                   dirp->d_namlen = dirp->d_type;
> > -                   dirp->d_type = tmp;
> > -           }
> > -#  endif
> >     return (ALTERED|STOP);
> >  }
> >  
> > @@ -366,10 +317,7 @@ chgino(struct inodesc *idesc)
> >     if (memcmp(dirp->d_name, idesc->id_name, (int)dirp->d_namlen + 1))
> >             return (KEEPON);
> >     dirp->d_ino = idesc->id_parent;
> > -   if (newinofmt)
> > -           dirp->d_type = GET_ITYPE(idesc->id_parent);
> > -   else
> > -           dirp->d_type = 0;
> > +   dirp->d_type = GET_ITYPE(idesc->id_parent);
> >     return (ALTERED|STOP);
> >  }
> >  
> > @@ -615,10 +563,7 @@ allocdir(ino_t parent, ino_t request, in
> >     struct inoinfo *inp;
> >  
> >     ino = allocino(request, IFDIR|mode);
> > -   if (newinofmt)
> > -           dirp = &dirhead;
> > -   else
> > -           dirp = (struct dirtemplate *)&odirhead;
> > +   dirp = &dirhead;
> >     dirp->dot_ino = ino;
> >     dirp->dotdot_ino = parent;
> >     dp = ginode(ino);
> > Index: fsck.h
> > ===================================================================
> > RCS file: /cvs/src/sbin/fsck_ffs/fsck.h,v
> > retrieving revision 1.24
> > diff -u -p -r1.24 fsck.h
> > --- fsck.h  16 Apr 2011 16:37:21 -0000      1.24
> > +++ fsck.h  17 Apr 2011 11:16:15 -0000
> > @@ -237,9 +237,6 @@ char    yflag;                  /* assume a yes 
> > response *
> >  int        bflag;                  /* location of alternate super block */
> >  int        debug;                  /* output debugging info */
> >  int        cvtlevel;               /* convert to newer file system format 
> > */
> > -int        doinglevel1;            /* converting to new cylinder group 
> > format */
> > -int        doinglevel2;            /* converting to new inode format */
> > -int        newinofmt;              /* filesystem has new inode format */
> >  char    usedsoftdep;            /* just fix soft dependency 
> > inconsistencies */
> >  int        preen;                  /* just fix normal inconsistencies */
> >  char    resolved;               /* cleared if unresolved changes => not 
> > clean */
> > Index: inode.c
> > ===================================================================
> > RCS file: /cvs/src/sbin/fsck_ffs/inode.c,v
> > retrieving revision 1.34
> > diff -u -p -r1.34 inode.c
> > --- inode.c 16 Apr 2011 16:37:21 -0000      1.34
> > +++ inode.c 17 Apr 2011 11:19:25 -0000
> > @@ -650,8 +650,7 @@ allocino(ino_t request, int type)
> >     DIP_SET(dp, di_blocks, btodb(sblock.fs_fsize));
> >     n_files++;
> >     inodirty();
> > -   if (newinofmt)
> > -           SET_ITYPE(ino, IFTODT(type));
> > +   SET_ITYPE(ino, IFTODT(type));
> >     return (ino);
> >  }
> >  
> > Index: main.c
> > ===================================================================
> > RCS file: /cvs/src/sbin/fsck_ffs/main.c,v
> > retrieving revision 1.37
> > diff -u -p -r1.37 main.c
> > --- main.c  16 Apr 2011 16:37:21 -0000      1.37
> > +++ main.c  18 Apr 2011 09:33:15 -0000
> > @@ -76,6 +76,9 @@ main(int argc, char *argv[])
> >             case 'c':
> >                     skipclean = 0;
> >                     cvtlevel = argtoi('c', "conversion level", optarg, 10);
> > +                   if (cvtlevel < 3)
> > +                           errexit("cannot do level %d conversion\n",
> > +                               cvtlevel);
> >                     break;
> >  
> >             case 'd':
> > Index: pass1.c
> > ===================================================================
> > RCS file: /cvs/src/sbin/fsck_ffs/pass1.c,v
> > retrieving revision 1.34
> > diff -u -p -r1.34 pass1.c
> > --- pass1.c 16 Apr 2011 16:37:21 -0000      1.34
> > +++ pass1.c 17 Apr 2011 11:20:38 -0000
> > @@ -259,34 +259,6 @@ checkinode(ino_t inumber, struct inodesc
> >             ndb++;
> >     if (mode == IFLNK) {
> >             /*
> > -            * Note that the old fastlink format always had di_blocks set
> > -            * to 0.  Other than that we no longer use the `spare' field
> > -            * (which is now the extended uid) for sanity checking, the
> > -            * new format is the same as the old.  We simply ignore the
> > -            * conversion altogether.  - mycroft, 19MAY1994
> > -            */
> > -           if (sblock.fs_magic == FS_UFS1_MAGIC && doinglevel2 &&
> > -               DIP(dp, di_size) > 0 &&
> > -               DIP(dp, di_size) < MAXSYMLINKLEN_UFS1 &&
> > -               DIP(dp, di_blocks) != 0) {
> > -                   symbuf = alloca(secsize);
> > -                   if (bread(fsreadfd, symbuf,
> > -                       fsbtodb(&sblock, DIP(dp, di_db[0])),
> > -                       (long)secsize) != 0)
> > -                           errexit("cannot read symlink\n");
> > -                   if (debug) {
> > -                           symbuf[DIP(dp, di_size)] = 0;
> > -                           printf("convert symlink %d(%s) of size %llu\n",
> > -                                   inumber, symbuf,
> > -                                   (unsigned long long)DIP(dp, di_size));
> > -                   }
> > -                   dp = ginode(inumber);
> > -                   memcpy(dp->dp1.di_shortlink, symbuf,
> > -                       (long)DIP(dp, di_size));
> > -                   DIP_SET(dp, di_blocks, 0);
> > -                   inodirty();
> > -           }
> > -           /*
> >              * Fake ndb value so direct/indirect block checks below
> >              * will detect any garbage after symlink string.
> >              */
> > @@ -349,16 +321,6 @@ checkinode(ino_t inumber, struct inodesc
> >     } else
> >             SET_ISTATE(inumber, FSTATE);
> >     SET_ITYPE(inumber, IFTODT(mode));
> > -   if (sblock.fs_magic == FS_UFS1_MAGIC && doinglevel2 &&
> > -      (dp->dp1.di_ouid != (u_short)-1 ||
> > -       dp->dp1.di_ogid != (u_short)-1)) {
> > -           dp = ginode(inumber);
> > -           DIP_SET(dp, di_uid, dp->dp1.di_ouid);
> > -           dp->dp1.di_ouid = -1;
> > -           DIP_SET(dp, di_gid, dp->dp1.di_ogid);
> > -           dp->dp1.di_ogid = -1;
> > -           inodirty();
> > -   }
> >     badblk = dupblk = 0;
> >     idesc->id_number = inumber;
> >     (void)ckinode(dp, idesc);
> > Index: pass2.c
> > ===================================================================
> > RCS file: /cvs/src/sbin/fsck_ffs/pass2.c,v
> > retrieving revision 1.30
> > diff -u -p -r1.30 pass2.c
> > --- pass2.c 16 Apr 2011 16:37:21 -0000      1.30
> > +++ pass2.c 17 Apr 2011 11:23:37 -0000
> > @@ -259,13 +259,6 @@ pass2check(struct inodesc *idesc)
> >     char pathbuf[MAXPATHLEN + 1];
> >  
> >     /*
> > -    * If converting, set directory entry type.
> > -    */
> > -   if (doinglevel2 && dirp->d_ino > 0 && dirp->d_ino < maxino) {
> > -           dirp->d_type = GET_ITYPE(dirp->d_ino);
> > -           ret |= ALTERED;
> > -   }
> > -   /*
> >      * check for "."
> >      */
> >     if (idesc->id_entryno != 0)
> > @@ -277,7 +270,7 @@ pass2check(struct inodesc *idesc)
> >                     if (reply("FIX") == 1)
> >                             ret |= ALTERED;
> >             }
> > -           if (newinofmt && dirp->d_type != DT_DIR) {
> > +           if (dirp->d_type != DT_DIR) {
> >                     direrror(idesc->id_number, "BAD TYPE VALUE FOR '.'");
> >                     dirp->d_type = DT_DIR;
> >                     if (reply("FIX") == 1)
> > @@ -287,21 +280,9 @@ pass2check(struct inodesc *idesc)
> >     }
> >     direrror(idesc->id_number, "MISSING '.'");
> >     proto.d_ino = idesc->id_number;
> > -   if (newinofmt)
> > -           proto.d_type = DT_DIR;
> > -   else
> > -           proto.d_type = 0;
> > +   proto.d_type = DT_DIR;
> >     proto.d_namlen = 1;
> >     (void)strlcpy(proto.d_name, ".", sizeof proto.d_name);
> > -#  if BYTE_ORDER == LITTLE_ENDIAN
> > -           if (!newinofmt) {
> > -                   u_char tmp;
> > -
> > -                   tmp = proto.d_type;
> > -                   proto.d_type = proto.d_namlen;
> > -                   proto.d_namlen = tmp;
> > -           }
> > -#  endif
> >     entrysize = DIRSIZ(0, &proto);
> >     if (dirp->d_ino != 0 && strcmp(dirp->d_name, "..") != 0) {
> >             pfatal("CANNOT FIX, FIRST ENTRY IN DIRECTORY CONTAINS %s\n",
> > @@ -330,21 +311,9 @@ chk1:
> >             goto chk2;
> >     inp = getinoinfo(idesc->id_number);
> >     proto.d_ino = inp->i_parent;
> > -   if (newinofmt)
> > -           proto.d_type = DT_DIR;
> > -   else
> > -           proto.d_type = 0;
> > +   proto.d_type = DT_DIR;
> >     proto.d_namlen = 2;
> >     (void)strlcpy(proto.d_name, "..", sizeof proto.d_name);
> > -#  if BYTE_ORDER == LITTLE_ENDIAN
> > -           if (!newinofmt) {
> > -                   u_char tmp;
> > -
> > -                   tmp = proto.d_type;
> > -                   proto.d_type = proto.d_namlen;
> > -                   proto.d_namlen = tmp;
> > -           }
> > -#  endif
> >     entrysize = DIRSIZ(0, &proto);
> >     if (idesc->id_entryno == 0) {
> >             n = DIRSIZ(0, dirp);
> > @@ -360,7 +329,7 @@ chk1:
> >     }
> >     if (dirp->d_ino != 0 && strcmp(dirp->d_name, "..") == 0) {
> >             inp->i_dotdot = dirp->d_ino;
> > -           if (newinofmt && dirp->d_type != DT_DIR) {
> > +           if (dirp->d_type != DT_DIR) {
> >                     direrror(idesc->id_number, "BAD TYPE VALUE FOR '..'");
> >                     dirp->d_type = DT_DIR;
> >                     if (reply("FIX") == 1)
> > @@ -473,8 +442,7 @@ again:
> >                     /* FALLTHROUGH */
> >  
> >             case FSTATE:
> > -                   if (newinofmt && dirp->d_type !=
> > -                       GET_ITYPE(dirp->d_ino)) {
> > +                   if (dirp->d_type != GET_ITYPE(dirp->d_ino)) {
> >                             fileerror(idesc->id_number, dirp->d_ino,
> >                                 "BAD TYPE VALUE");
> >                             dirp->d_type = GET_ITYPE(dirp->d_ino);
> > Index: pass5.c
> > ===================================================================
> > RCS file: /cvs/src/sbin/fsck_ffs/pass5.c,v
> > retrieving revision 1.40
> > diff -u -p -r1.40 pass5.c
> > --- pass5.c 16 Apr 2011 16:37:21 -0000      1.40
> > +++ pass5.c 17 Apr 2011 11:24:38 -0000
> > @@ -65,7 +65,7 @@ pass5(void)
> >     struct cg *cg = &cgrp;
> >     daddr64_t dbase, dmax;
> >     daddr64_t d;
> > -   long i, j, k;
> > +   long i, j, k, rewritecg = 0;
> >     struct csum *cs;
> >     struct csum_total cstotal;
> >     struct inodesc idesc[3];
> > @@ -80,7 +80,7 @@ pass5(void)
> >                             pwarn("DELETING CLUSTERING MAPS\n");
> >                     if (preen || reply("DELETE CLUSTERING MAPS")) {
> >                             fs->fs_contigsumsize = 0;
> > -                           doinglevel1 = 1;
> > +                           rewritecg = 1;
> >                             sbdirty();
> >                     }
> >             }
> > @@ -107,7 +107,7 @@ pass5(void)
> >                                                 doit);
> >                                     fs->fs_cgsize =
> >                                         fragroundup(fs, CGSIZE(fs));
> > -                                   doinglevel1 = 1;
> > +                                   rewritecg = 1;
> >                                     sbdirty();
> >                             }
> >                     }
> > @@ -164,11 +164,8 @@ pass5(void)
> >                     fs->fs_postblformat);
> >     }
> >     memset(&idesc[0], 0, sizeof idesc);
> > -   for (i = 0; i < 3; i++) {
> > +   for (i = 0; i < 3; i++)
> >             idesc[i].id_type = ADDR;
> > -           if (doinglevel2)
> > -                   idesc[i].id_fix = FIX;
> > -   }
> >     memset(&cstotal, 0, sizeof(struct csum_total));
> >     dmax = blknum(fs, fs->fs_size + fs->fs_frag - 1);
> >     for (d = fs->fs_size; d < dmax; d++)
> > @@ -320,7 +317,7 @@ pass5(void)
> >                     memcpy(cs, &newcg->cg_cs, sizeof *cs);
> >                     sbdirty();
> >             }
> > -           if (doinglevel1) {
> > +           if (rewritecg) {
> >                     memcpy(cg, newcg, (size_t)fs->fs_cgsize);
> >                     cgdirty();
> >                     continue;
> > Index: setup.c
> > ===================================================================
> > RCS file: /cvs/src/sbin/fsck_ffs/setup.c,v
> > retrieving revision 1.47
> > diff -u -p -r1.47 setup.c
> > --- setup.c 16 Apr 2011 16:37:21 -0000      1.47
> > +++ setup.c 17 Apr 2011 19:16:18 -0000
> > @@ -260,96 +260,57 @@ found:
> >                     dirty(&asblk);
> >             }
> >     }
> > -   if (sblock.fs_inodefmt >= FS_44INODEFMT) {
> > -           if (sblock.fs_maxfilesize != maxfilesize) {
> > -                   pwarn("INCORRECT MAXFILESIZE=%llu IN SUPERBLOCK",
> > -                       (unsigned long long)sblock.fs_maxfilesize);
> > -                   sblock.fs_maxfilesize = maxfilesize;
> > -                   if (preen)
> > -                           printf(" (FIXED)\n");
> > -                   if (preen || reply("FIX") == 1) {
> > -                           sbdirty();
> > -                           dirty(&asblk);
> > -                   }
> > -           }
> > -           maxsymlinklen = sblock.fs_magic == FS_UFS1_MAGIC ?
> > -               MAXSYMLINKLEN_UFS1 : MAXSYMLINKLEN_UFS2;
> > -           if (sblock.fs_maxsymlinklen != maxsymlinklen) {
> > -                   pwarn("INCORRECT MAXSYMLINKLEN=%d IN SUPERBLOCK",
> > -                       sblock.fs_maxsymlinklen);
> > -                   sblock.fs_maxsymlinklen = maxsymlinklen;
> > -                   if (preen)
> > -                           printf(" (FIXED)\n");
> > -                   if (preen || reply("FIX") == 1) {
> > -                           sbdirty();
> > -                           dirty(&asblk);
> > -                   }
> > -           }
> > -           if (sblock.fs_qbmask != ~sblock.fs_bmask) {
> > -                   pwarn("INCORRECT QBMASK=%lx IN SUPERBLOCK",
> > -                       (unsigned long)sblock.fs_qbmask);
> > -                   sblock.fs_qbmask = ~sblock.fs_bmask;
> > -                   if (preen)
> > -                           printf(" (FIXED)\n");
> > -                   if (preen || reply("FIX") == 1) {
> > -                           sbdirty();
> > -                           dirty(&asblk);
> > -                   }
> > -           }
> > -           if (sblock.fs_qfmask != ~sblock.fs_fmask) {
> > -                   pwarn("INCORRECT QFMASK=%lx IN SUPERBLOCK",
> > -                       (unsigned long)sblock.fs_qfmask);
> > -                   sblock.fs_qfmask = ~sblock.fs_fmask;
> > -                   if (preen)
> > -                           printf(" (FIXED)\n");
> > -                   if (preen || reply("FIX") == 1) {
> > -                           sbdirty();
> > -                           dirty(&asblk);
> > -                   }
> > +   if (sblock.fs_inodefmt < FS_44INODEFMT) {
> > +           pwarn("Format of filesystem is too old.\n");
> > +           pwarn("Must update to modern format using a version of fsck\n");
> > +           pfatal("from before release 5.0 with the command ``fsck -c 
> > 2''\n");
> > +           exit(8);
> > +   }
> > +   if (sblock.fs_maxfilesize != maxfilesize) {
> > +           pwarn("INCORRECT MAXFILESIZE=%llu IN SUPERBLOCK",
> > +               (unsigned long long)sblock.fs_maxfilesize);
> > +           sblock.fs_maxfilesize = maxfilesize;
> > +           if (preen)
> > +                   printf(" (FIXED)\n");
> > +           if (preen || reply("FIX") == 1) {
> > +                   sbdirty();
> > +                   dirty(&asblk);
> >             }
> > -           newinofmt = 1;
> > -   } else {
> > -           sblock.fs_qbmask = ~sblock.fs_bmask;
> > -           sblock.fs_qfmask = ~sblock.fs_fmask;
> > -           newinofmt = 0;
> >     }
> > -   /*
> > -    * Convert to new inode format.
> > -    */
> > -   if (cvtlevel >= 2 && sblock.fs_inodefmt < FS_44INODEFMT) {
> > +   maxsymlinklen = sblock.fs_magic == FS_UFS1_MAGIC ?
> > +       MAXSYMLINKLEN_UFS1 : MAXSYMLINKLEN_UFS2;
> > +   if (sblock.fs_maxsymlinklen != maxsymlinklen) {
> > +           pwarn("INCORRECT MAXSYMLINKLEN=%d IN SUPERBLOCK",
> > +               sblock.fs_maxsymlinklen);
> > +           sblock.fs_maxsymlinklen = maxsymlinklen;
> >             if (preen)
> > -                   pwarn("CONVERTING TO NEW INODE FORMAT\n");
> > -           else if (!reply("CONVERT TO NEW INODE FORMAT"))
> > -                   return(0);
> > -           doinglevel2++;
> > -           sblock.fs_inodefmt = FS_44INODEFMT;
> > -           sblock.fs_maxfilesize = maxfilesize;
> > -           sblock.fs_maxsymlinklen = MAXSYMLINKLEN_UFS1;
> > +                   printf(" (FIXED)\n");
> > +           if (preen || reply("FIX") == 1) {
> > +                   sbdirty();
> > +                   dirty(&asblk);
> > +           }
> > +   }
> > +   if (sblock.fs_qbmask != ~sblock.fs_bmask) {
> > +           pwarn("INCORRECT QBMASK=%lx IN SUPERBLOCK",
> > +               (unsigned long)sblock.fs_qbmask);
> >             sblock.fs_qbmask = ~sblock.fs_bmask;
> > -           sblock.fs_qfmask = ~sblock.fs_fmask;
> > -           sbdirty();
> > -           dirty(&asblk);
> > +           if (preen)
> > +                   printf(" (FIXED)\n");
> > +           if (preen || reply("FIX") == 1) {
> > +                   sbdirty();
> > +                   dirty(&asblk);
> > +           }
> >     }
> > -   /*
> > -    * Convert to new cylinder group format.
> > -    */
> > -   if (cvtlevel >= 1 && sblock.fs_postblformat == FS_42POSTBLFMT) {
> > +   if (sblock.fs_qfmask != ~sblock.fs_fmask) {
> > +           pwarn("INCORRECT QFMASK=%lx IN SUPERBLOCK",
> > +               (unsigned long)sblock.fs_qfmask);
> > +           sblock.fs_qfmask = ~sblock.fs_fmask;
> >             if (preen)
> > -                   pwarn("CONVERTING TO NEW CYLINDER GROUP FORMAT\n");
> > -           else if (!reply("CONVERT TO NEW CYLINDER GROUP FORMAT"))
> > -                   return(0);
> > -           doinglevel1++;
> > -           sblock.fs_postblformat = FS_DYNAMICPOSTBLFMT;
> > -           sblock.fs_nrpos = 8;
> > -           sblock.fs_postbloff =
> > -               (char *)(&sblock.fs_maxbsize) -
> > -               (char *)(&sblock.fs_firstfield);
> > -           sblock.fs_rotbloff = &sblock.fs_space[0] -
> > -               (u_char *)(&sblock.fs_firstfield);
> > -           sblock.fs_cgsize =
> > -                   fragroundup(&sblock, CGSIZE(&sblock));
> > -           sbdirty();
> > -           dirty(&asblk);
> > +                   printf(" (FIXED)\n");
> > +           if (preen || reply("FIX") == 1) {
> > +                   sbdirty();
> > +                   dirty(&asblk);
> > +           }
> >     }
> >     if (sblock.fs_cgsize != fragroundup(&sblock, CGSIZE(&sblock))) {
> >             pwarn("INCONSISTENT CGSIZE=%d\n", sblock.fs_cgsize);
> > Index: utilities.c
> > ===================================================================
> > RCS file: /cvs/src/sbin/fsck_ffs/utilities.c,v
> > retrieving revision 1.38
> > diff -u -p -r1.38 utilities.c
> > --- utilities.c     16 Apr 2011 16:37:21 -0000      1.38
> > +++ utilities.c     17 Apr 2011 11:26:48 -0000
> > @@ -511,8 +511,7 @@ getpathname(char *namebuf, size_t namebu
> >  void
> >  catch(int signo)
> >  {
> > -   if (!doinglevel2)
> > -           ckfini(0);                      /* XXX signal race */
> > +   ckfini(0);                      /* XXX signal race */
> >     _exit(12);
> >  }

Reply via email to