As you may vaguely remember, I have plans to clean up MAKEDEV a bit,
which have the side effect of removing many unneeded device nodes from
the ramdisk target, used on the installation media.

Doing this will in turn expose a slight difference in filesystem
creation between the pre-makefs(8) world order (using newfs and
populating a vnd) and the current usage of makefs: while newfs will
create a fixed number of inodes, based upon the geometry parameters (one
inode per four fragments), makefs is lazier and will only build "enough"
inodes, where "enough" means that the number of available inodes will be
rounded to the number of inodes in a cylinder group.

tl;dr: by removing unneeded MAKEDEV entries, some platforms will end up
with makefs creating a file system with 256 inodes, of which about 250
are used, and installation will misbehave in interesting ways due to the
lack of free inodes.

There are two ways to address this:
1. fix makefs to initialize inodes in all cylinder groups.
2. let the `-f' option of makefs, used to specify a given number of free
   inodes, be accepted even when using a fixed geometry.

The following diff implements choice #2 (which is the easiest to do),
and adds `-f 100' to require 100 free inodes, in every installation
media.

The advantage, IMHO, of going this way, is that if the geometry does not
allow for enough free inodes, building installation media will fail, and
this will get noticed quickly.

Case in point: at the moment, the alpha bsd.rd uses a geometry
providing up to 384 inodes, of which 277 are used. Building with -f 100,
requiring thus 377 inodes, completes, while trying -f 120 will fail:

  makefs -o disklabel=rdroot,minfree=0,density=8192 -f 120 mr.fs mr.fs.d
  Calculated size of `mr.fs': 2940928 bytes, 397 inodes
  Extent size set to 8192
  mr.fs: 2.8MB (5744 sectors) block size 8192, fragment size 1024
          using 1 cylinder groups of 2.80MB, 359 blks, 384 inodes.
  super-block backups (for fsck -b #) at:
   32,
  makefs: Image file `mr.fs' has 384 free inodes; 397 are required.
  makefs: Image file `mr.fs' not created.
  *** Error 1 in /usr/src/distrib/alpha/miniroot (Makefile:89 'mr.fs')

I have not been able to test that diff on all platforms, therefore I
don't know which platforms will require tweaks to their miniroot
filesystem geometry to build with that "100 free inodes" requirement.
Maybe the amount can be adjusted on legacy platforms. Also, the makefs
diff can go in and installation media changes applied later on a
tested-platform basis.

In any case, keep in mind that I have upcoming changes which will free
a bunch of inodes from every miniroot.

Index: usr.sbin/makefs/ffs.c
===================================================================
RCS file: /OpenBSD/src/usr.sbin/makefs/ffs.c,v
retrieving revision 1.36
diff -u -p -r1.36 ffs.c
--- usr.sbin/makefs/ffs.c       11 Jan 2022 05:34:32 -0000      1.36
+++ usr.sbin/makefs/ffs.c       25 Feb 2022 16:47:17 -0000
@@ -324,10 +324,9 @@ ffs_validate(const char *dir, fsnode *ro
                if (pp->p_fragblock == 0)
                        errx(1, "fragment size missing in disktab");
                if (fsopts->freeblocks != 0 || fsopts->freeblockpc != 0 ||
-                   fsopts->freefiles != 0 || fsopts->freefilepc != 0 ||
                    fsopts->minsize != 0 || fsopts->maxsize != 0 ||
                    fsopts->sectorsize != -1 || fsopts->size != 0)
-                       errx(1, "-bfMmSs and disklabel are mutually exclusive");
+                       errx(1, "-bMmSs and disklabel are mutually exclusive");
                if (ffs_opts->fsize != -1 || ffs_opts->bsize != -1)
                        errx(1, "b/fsize and disklabel are mutually exclusive");
 
Index: distrib/alpha/miniroot/Makefile
===================================================================
RCS file: /OpenBSD/src/distrib/alpha/miniroot/Makefile,v
retrieving revision 1.23
diff -u -p -r1.23 Makefile
--- distrib/alpha/miniroot/Makefile     26 Jul 2021 12:47:44 -0000      1.23
+++ distrib/alpha/miniroot/Makefile     25 Feb 2022 16:47:17 -0000
@@ -12,7 +12,7 @@ LISTS=                ${.CURDIR}/list
 UTILS=         ${.CURDIR}/../../miniroot
 
 MRDISKTYPE=    rdroot
-MRMAKEFSARGS=  -o disklabel=${MRDISKTYPE},minfree=0,density=8192
+MRMAKEFSARGS=  -o disklabel=${MRDISKTYPE},minfree=0,density=8192 -f 100
 
 all: ${FS} ${CDROM}
 
Index: distrib/amd64/ramdiskA/Makefile
===================================================================
RCS file: /OpenBSD/src/distrib/amd64/ramdiskA/Makefile,v
retrieving revision 1.16
diff -u -p -r1.16 Makefile
--- distrib/amd64/ramdiskA/Makefile     26 Jul 2021 12:47:44 -0000      1.16
+++ distrib/amd64/ramdiskA/Makefile     25 Feb 2022 16:47:17 -0000
@@ -30,7 +30,7 @@ ${FS}: bsd.gz
        rm -f vnd
 
 MRDISKTYPE=    rdroot
-MRMAKEFSARGS=  -o disklabel=${MRDISKTYPE},minfree=0,density=4096
+MRMAKEFSARGS=  -o disklabel=${MRDISKTYPE},minfree=0,density=4096 -f 100
 
 bsd.gz: bsd.rd
        objcopy -S -R .comment -R .SUNW_ctf \
Index: distrib/amd64/ramdisk_cd/Makefile
===================================================================
RCS file: /OpenBSD/src/distrib/amd64/ramdisk_cd/Makefile,v
retrieving revision 1.34
diff -u -p -r1.34 Makefile
--- distrib/amd64/ramdisk_cd/Makefile   13 Nov 2021 18:18:59 -0000      1.34
+++ distrib/amd64/ramdisk_cd/Makefile   25 Feb 2022 16:47:17 -0000
@@ -55,7 +55,7 @@ ${CDROM}: bsd.rd
            ${.OBJDIR}/cd-dir
 
 MRDISKTYPE=    rdrootb
-MRMAKEFSARGS=  -o disklabel=${MRDISKTYPE},minfree=0,density=4096
+MRMAKEFSARGS=  -o disklabel=${MRDISKTYPE},minfree=0,density=4096 -f 100
 
 bsd.gz: bsd.rd
        objcopy -g -x -R .comment -R .SUNW_ctf \
Index: distrib/arm64/ramdisk/Makefile
===================================================================
RCS file: /OpenBSD/src/distrib/arm64/ramdisk/Makefile,v
retrieving revision 1.24
diff -u -p -r1.24 Makefile
--- distrib/arm64/ramdisk/Makefile      10 Feb 2022 20:07:47 -0000      1.24
+++ distrib/arm64/ramdisk/Makefile      25 Feb 2022 16:47:17 -0000
@@ -21,7 +21,7 @@ LISTS=                ${.CURDIR}/list
 UTILS=         ${.CURDIR}/../../miniroot
 
 MRFSDISKTYPE=  rdroot
-MRMAKEFSARGS=  -o disklabel=${MRFSDISKTYPE},minfree=0,density=4096
+MRMAKEFSARGS=  -o disklabel=${MRFSDISKTYPE},minfree=0,density=4096 -f 100
 
 PIFILES=\
        bootcode.bin \
Index: distrib/armv7/ramdisk/Makefile
===================================================================
RCS file: /OpenBSD/src/distrib/armv7/ramdisk/Makefile,v
retrieving revision 1.28
diff -u -p -r1.28 Makefile
--- distrib/armv7/ramdisk/Makefile      26 Jul 2021 12:47:45 -0000      1.28
+++ distrib/armv7/ramdisk/Makefile      25 Feb 2022 16:47:17 -0000
@@ -7,7 +7,7 @@ LISTS=          ${.CURDIR}/list
 UTILS=         ${.CURDIR}/../../miniroot
 
 MRDISKTYPE=    rdroot
-MRMAKEFSARGS=  -o disklabel=${MRDISKTYPE},minfree=0,density=4096
+MRMAKEFSARGS=  -o disklabel=${MRDISKTYPE},minfree=0,density=4096 -f 100
 
 all:   bsd.rd
 
Index: distrib/hppa/ramdisk/Makefile
===================================================================
RCS file: /OpenBSD/src/distrib/hppa/ramdisk/Makefile,v
retrieving revision 1.48
diff -u -p -r1.48 Makefile
--- distrib/hppa/ramdisk/Makefile       26 Jul 2021 12:47:45 -0000      1.48
+++ distrib/hppa/ramdisk/Makefile       25 Feb 2022 16:47:17 -0000
@@ -9,7 +9,7 @@ LISTS=          ${.CURDIR}/list
 UTILS=         ${.CURDIR}/../../miniroot
 
 MRDISKTYPE=    rdroot
-MRMAKEFSARGS=  -o disklabel=${MRDISKTYPE},minfree=0,density=4096
+MRMAKEFSARGS=  -o disklabel=${MRDISKTYPE},minfree=0,density=4096 -f 100
 
 all: ${LIF} ${CDROM}
 
Index: distrib/i386/ramdisk/Makefile
===================================================================
RCS file: /OpenBSD/src/distrib/i386/ramdisk/Makefile,v
retrieving revision 1.16
diff -u -p -r1.16 Makefile
--- distrib/i386/ramdisk/Makefile       26 Jul 2021 12:47:45 -0000      1.16
+++ distrib/i386/ramdisk/Makefile       25 Feb 2022 16:47:17 -0000
@@ -31,7 +31,7 @@ ${FS}: bsd.gz
        rm -f vnd
 
 MRDISKTYPE=    rdroot
-MRMAKEFSARGS=  -o disklabel=${MRDISKTYPE},minfree=0,density=4096
+MRMAKEFSARGS=  -o disklabel=${MRDISKTYPE},minfree=0,density=4096 -f 100
 
 bsd.gz: bsd.rd
        objcopy -S -R .comment -R .SUNW_ctf \
Index: distrib/i386/ramdisk_cd/Makefile
===================================================================
RCS file: /OpenBSD/src/distrib/i386/ramdisk_cd/Makefile,v
retrieving revision 1.26
diff -u -p -r1.26 Makefile
--- distrib/i386/ramdisk_cd/Makefile    4 Oct 2021 17:02:21 -0000       1.26
+++ distrib/i386/ramdisk_cd/Makefile    25 Feb 2022 16:47:17 -0000
@@ -50,7 +50,7 @@ ${CDROM}: bsd.rd
            ${.OBJDIR}/cd-dir
 
 MRDISKTYPE=    rdrootb
-MRMAKEFSARGS=  -o disklabel=${MRDISKTYPE},minfree=0,density=4096
+MRMAKEFSARGS=  -o disklabel=${MRDISKTYPE},minfree=0,density=4096 -f 100
 
 bsd.gz: bsd.rd
        objcopy -S -R .comment -R .SUNW_ctf \
Index: distrib/landisk/ramdisk/Makefile
===================================================================
RCS file: /OpenBSD/src/distrib/landisk/ramdisk/Makefile,v
retrieving revision 1.34
diff -u -p -r1.34 Makefile
--- distrib/landisk/ramdisk/Makefile    26 Jul 2021 12:47:45 -0000      1.34
+++ distrib/landisk/ramdisk/Makefile    25 Feb 2022 16:47:17 -0000
@@ -11,7 +11,7 @@ LISTS=                ${.CURDIR}/list
 UTILS=         ${.CURDIR}/../../miniroot
 
 MRDISKTYPE=    rdroot2.5M
-MRMAKEFSARGS=  -o disklabel=${MRDISKTYPE},minfree=0,density=4096
+MRMAKEFSARGS=  -o disklabel=${MRDISKTYPE},minfree=0,density=4096 -f 100
 
 all: ${FS}
 
Index: distrib/loongson/ramdisk/Makefile
===================================================================
RCS file: /OpenBSD/src/distrib/loongson/ramdisk/Makefile,v
retrieving revision 1.32
diff -u -p -r1.32 Makefile
--- distrib/loongson/ramdisk/Makefile   7 Feb 2022 15:21:38 -0000       1.32
+++ distrib/loongson/ramdisk/Makefile   25 Feb 2022 16:47:17 -0000
@@ -12,7 +12,7 @@ LISTS=                ${.CURDIR}/list
 UTILS=         ${.CURDIR}/../../miniroot
 
 MRDISKTYPE=    rdroot
-MRMAKEFSARGS=  -o disklabel=${MRDISKTYPE},minfree=0,density=4096
+MRMAKEFSARGS=  -o disklabel=${MRDISKTYPE},minfree=0,density=4096 -f 100
 
 MSDOSSTART=    63
 MSDOSSIZE!=    expr ${FSSIZE} - ${MSDOSSTART}
Index: distrib/luna88k/ramdisk/Makefile
===================================================================
RCS file: /OpenBSD/src/distrib/luna88k/ramdisk/Makefile,v
retrieving revision 1.32
diff -u -p -r1.32 Makefile
--- distrib/luna88k/ramdisk/Makefile    26 Jul 2021 12:47:46 -0000      1.32
+++ distrib/luna88k/ramdisk/Makefile    25 Feb 2022 16:47:17 -0000
@@ -11,7 +11,7 @@ LISTS=                ${.CURDIR}/list
 UTILS=         ${.CURDIR}/../../miniroot
 
 MRDISKTYPE=    rdroot
-MRMAKEFSARGS=  -o disklabel=${MRDISKTYPE},minfree=0,density=4096
+MRMAKEFSARGS=  -o disklabel=${MRDISKTYPE},minfree=0,density=4096 -f 100
 
 LDSTATIC=-static
 
Index: distrib/macppc/ramdisk/Makefile
===================================================================
RCS file: /OpenBSD/src/distrib/macppc/ramdisk/Makefile,v
retrieving revision 1.52
diff -u -p -r1.52 Makefile
--- distrib/macppc/ramdisk/Makefile     11 Nov 2021 20:25:56 -0000      1.52
+++ distrib/macppc/ramdisk/Makefile     25 Feb 2022 16:47:17 -0000
@@ -29,7 +29,7 @@ ${CDROM}: bsd.gz
            -o ${CDROM} ${.OBJDIR}/cd-dir
 
 MRDISKTYPE=    rdroot
-MRMAKEFSARGS=  -o disklabel=${MRDISKTYPE},minfree=0,density=4096
+MRMAKEFSARGS=  -o disklabel=${MRDISKTYPE},minfree=0,density=4096 -f 100
 
 bsd.gz: bsd.rd
        gzip -9cn bsd.rd > bsd.gz
Index: distrib/octeon/ramdisk/Makefile
===================================================================
RCS file: /OpenBSD/src/distrib/octeon/ramdisk/Makefile,v
retrieving revision 1.21
diff -u -p -r1.21 Makefile
--- distrib/octeon/ramdisk/Makefile     6 Feb 2022 15:52:23 -0000       1.21
+++ distrib/octeon/ramdisk/Makefile     25 Feb 2022 16:47:17 -0000
@@ -13,7 +13,7 @@ LISTS=                ${.CURDIR}/list
 UTILS=         ${.CURDIR}/../../miniroot
 
 MRDISKTYPE=    rdroot
-MRMAKEFSARGS=  -o disklabel=${MRDISKTYPE},minfree=0,density=4096
+MRMAKEFSARGS=  -o disklabel=${MRDISKTYPE},minfree=0,density=4096 -f 100
 
 MSDOSSTART=    64
 MSDOSSIZE!=    expr ${FSSIZE} - ${MSDOSSTART}
Index: distrib/powerpc64/ramdisk/Makefile
===================================================================
RCS file: /OpenBSD/src/distrib/powerpc64/ramdisk/Makefile,v
retrieving revision 1.4
diff -u -p -r1.4 Makefile
--- distrib/powerpc64/ramdisk/Makefile  10 Feb 2022 15:12:57 -0000      1.4
+++ distrib/powerpc64/ramdisk/Makefile  25 Feb 2022 16:47:17 -0000
@@ -17,7 +17,7 @@ LISTS=                ${.CURDIR}/list
 UTILS=         ${.CURDIR}/../../miniroot
 
 MRFSDISKTYPE=  rdroot
-MRMAKEFSARGS=  -o disklabel=${MRFSDISKTYPE},minfree=0,density=4096
+MRMAKEFSARGS=  -o disklabel=${MRFSDISKTYPE},minfree=0,density=4096 -f 100
 
 all: ${FS}
 
Index: distrib/riscv64/ramdisk/Makefile
===================================================================
RCS file: /OpenBSD/src/distrib/riscv64/ramdisk/Makefile,v
retrieving revision 1.5
diff -u -p -r1.5 Makefile
--- distrib/riscv64/ramdisk/Makefile    4 Feb 2022 18:12:47 -0000       1.5
+++ distrib/riscv64/ramdisk/Makefile    25 Feb 2022 16:47:17 -0000
@@ -17,7 +17,7 @@ LISTS=                ${.CURDIR}/list
 UTILS=         ${.CURDIR}/../../miniroot
 
 MRFSDISKTYPE=  rdroot
-MRMAKEFSARGS=  -o disklabel=${MRFSDISKTYPE},minfree=0,density=8192
+MRMAKEFSARGS=  -o disklabel=${MRFSDISKTYPE},minfree=0,density=8192 -f 100
 
 all: ${FS}
 
Index: distrib/sparc64/miniroot/Makefile
===================================================================
RCS file: /OpenBSD/src/distrib/sparc64/miniroot/Makefile,v
retrieving revision 1.28
diff -u -p -r1.28 Makefile
--- distrib/sparc64/miniroot/Makefile   26 Jul 2021 12:47:47 -0000      1.28
+++ distrib/sparc64/miniroot/Makefile   25 Feb 2022 16:47:17 -0000
@@ -12,7 +12,7 @@ LISTS=                ${.CURDIR}/list
 UTILS=         ${.CURDIR}/../../miniroot
 
 MRDISKTYPE=    rdroot
-MRMAKEFSARGS=  -o disklabel=${MRDISKTYPE},minfree=0,density=4096
+MRMAKEFSARGS=  -o disklabel=${MRDISKTYPE},minfree=0,density=4096 -f 100
 
 all: ${FS} ${CDROM}
 
Index: distrib/sparc64/ramdisk/Makefile
===================================================================
RCS file: /OpenBSD/src/distrib/sparc64/ramdisk/Makefile,v
retrieving revision 1.54
diff -u -p -r1.54 Makefile
--- distrib/sparc64/ramdisk/Makefile    26 Jul 2021 12:47:47 -0000      1.54
+++ distrib/sparc64/ramdisk/Makefile    25 Feb 2022 16:47:17 -0000
@@ -11,7 +11,7 @@ LISTS=                ${.CURDIR}/list
 UTILS=         ${.CURDIR}/../../miniroot
 
 MRDISKTYPE=    rdroot
-MRMAKEFSARGS=  -o disklabel=${MRDISKTYPE},minfree=0,density=4096
+MRMAKEFSARGS=  -o disklabel=${MRDISKTYPE},minfree=0,density=4096 -f 100
 
 all: ${FS}
 
Index: distrib/sparc64/ramdiskB/Makefile
===================================================================
RCS file: /OpenBSD/src/distrib/sparc64/ramdiskB/Makefile,v
retrieving revision 1.50
diff -u -p -r1.50 Makefile
--- distrib/sparc64/ramdiskB/Makefile   26 Jul 2021 12:47:47 -0000      1.50
+++ distrib/sparc64/ramdiskB/Makefile   25 Feb 2022 16:47:17 -0000
@@ -11,7 +11,7 @@ LISTS=                ${.CURDIR}/list
 UTILS=         ${.CURDIR}/../../miniroot
 
 MRDISKTYPE=    rdroot
-MRMAKEFSARGS=  -o disklabel=${MRDISKTYPE},minfree=0,density=8192
+MRMAKEFSARGS=  -o disklabel=${MRDISKTYPE},minfree=0,density=8192 -f 100
 
 all: ${FS}
 

Reply via email to