Hi, makefs(8) creates an ffs1 filesystem by default, and the generated filesystem image passes fsck checks. However, when creating an ffs2 filesystem using the -o version=2 option, the generated filesystem image fails fsck checks.
This patch resolves the issue by ensuring that the superblock parameters for the ffs2 filesystem match those set by newfs. --- diff --git a/usr.sbin/makefs/ffs/mkfs.c b/usr.sbin/makefs/ffs/mkfs.c index a4d57c008a2..6369af6ba4a 100644 --- a/usr.sbin/makefs/ffs/mkfs.c +++ b/usr.sbin/makefs/ffs/mkfs.c @@ -222,13 +222,9 @@ ffs_mkfs(const char *fsys, const fsinfo_t *fsopts, time_t tstamp) sblock.fs_fmask = ~(sblock.fs_fsize - 1); sblock.fs_qbmask = ~sblock.fs_bmask; sblock.fs_qfmask = ~sblock.fs_fmask; - for (sblock.fs_bshift = 0, i = sblock.fs_bsize; i > 1; i >>= 1) - sblock.fs_bshift++; - for (sblock.fs_fshift = 0, i = sblock.fs_fsize; i > 1; i >>= 1) - sblock.fs_fshift++; + sblock.fs_bshift = ilog2(sblock.fs_bsize); + sblock.fs_fshift = ilog2(sblock.fs_fsize); sblock.fs_frag = numfrags(&sblock, sblock.fs_bsize); - for (sblock.fs_fragshift = 0, i = sblock.fs_frag; i > 1; i >>= 1) - sblock.fs_fragshift++; if (sblock.fs_frag > MAXFRAG) { printf("fragment size %d is too small, " "minimum with block size %d is %d\n", @@ -236,8 +232,12 @@ ffs_mkfs(const char *fsys, const fsinfo_t *fsopts, time_t tstamp) sblock.fs_bsize / MAXFRAG); exit(21); } + sblock.fs_fragshift = ilog2(sblock.fs_frag); sblock.fs_fsbtodb = ilog2(sblock.fs_fsize / sectorsize); sblock.fs_size = fssize = dbtofsb(&sblock, fssize); + sblock.fs_nspf = sblock.fs_fsize / sectorsize; + sblock.fs_nrpos = 1; + sblock.fs_cpg = 1; if (Oflag <= 1) { sblock.fs_magic = FS_UFS1_MAGIC; @@ -251,13 +251,10 @@ ffs_mkfs(const char *fsys, const fsinfo_t *fsopts, time_t tstamp) sblock.fs_ffs1_size = sblock.fs_size; sblock.fs_rotdelay = 0; sblock.fs_rps = 60; - sblock.fs_nspf = sblock.fs_fsize / sectorsize; - sblock.fs_cpg = 1; sblock.fs_interleave = 1; sblock.fs_trackskew = 0; sblock.fs_cpc = 0; sblock.fs_postblformat = 1; - sblock.fs_nrpos = 1; } else { sblock.fs_magic = FS_UFS2_MAGIC; #if 0 /* XXX makefs is used for small filesystems. */