From: Andrew Hewus Fresh Subject: Re: rc: skip rootdisk_nodes if we are running diskless To: tech@openbsd.org Cc: chara Date: Wed, 9 Sep 2026 11:03:32 -0700 On Tue, Sep 08, 2026 at 09:15:08PM +0330, chara wrote: > ping. > > On Wed, 02 Sep 2026 14:37:00 -0600 > "Theo de Raadt" wrote: > > > That looks good to me. It looked OK to me, this is the same, but with some consistency fixes to use [[ ]] as is done elsewhere in /etc/rc and not use `if` for early returns and local variables in use. I can split the commits if desired. Comments, OK? Index: rc =================================================================== RCS file: /cvs/src/etc/rc,v diff -u -p -r1.593 rc --- rc 3 Sep 2026 18:56:40 -0000 1.593 +++ rc 9 Sep 2026 18:02:19 -0000 @@ -308,22 +308,26 @@ run_upgrade_script() { # mount -uw /dev/rootdisk / # cd /dev && ./MAKEDEV redodisks rootdisk_nodes() { - if [ $(sysctl -n kern.maxpartitions) = 16 ]; then - _rootdev=$(mount | grep ' / ' | cut -d' ' -f1) - _maj=$(stat -f "%Hr" $_rootdev) - _omin=$(stat -f "%Lr" $_rootdev) - _min=$((_omin / 16 * 64)) - if [ -b /dev/rootdisk -a \ - "$(stat -qf %Hr,%Lr /dev/rootdisk)" = "$_maj,$_min" ]; then - return - fi - # does not exist or device changed, redo - _rrootdev=$(echo $_rootdev | sed -e 's,dev/,dev/r,') - _rmaj=$(stat -f "%Hr" $_rrootdev) - rm -f /dev/rrootdisk /dev/rootdisk - mknod -m 600 /dev/rrootdisk c $_rmaj $_min - mknod -m 600 /dev/rootdisk b $_maj $_min - fi + local _rootdev _rrootdev _maj _rmaj _omin _min + [[ $(sysctl -n kern.maxpartitions) = 16 ]] || return + + # Find and use root device if we are not booting from NFS + _rootdev=$(mount | grep ' / ' | grep -v ':' | cut -d' ' -f1) + [[ -n $_rootdev ]] || return + + _maj=$(stat -f "%Hr" $_rootdev) + _omin=$(stat -f "%Lr" $_rootdev) + _min=$((_omin / 16 * 64)) + [[ -b /dev/rootdisk ]] && + [[ "$(stat -qf %Hr,%Lr /dev/rootdisk)" = "$_maj,$_min" ]] && + return + + # does not exist or device changed, redo + _rrootdev=$(echo $_rootdev | sed -e 's,dev/,dev/r,') + _rmaj=$(stat -f "%Hr" $_rrootdev) + rm -f /dev/rrootdisk /dev/rootdisk + mknod -m 600 /dev/rrootdisk c $_rmaj $_min + mknod -m 600 /dev/rootdisk b $_maj $_min } # Check filesystems, optionally by using a fsck(8) flag.