Fix -r on multi-chunk softraid volumes
authorkn <kn@openbsd.org>
Mon, 5 Sep 2022 11:12:20 +0000 (11:12 +0000)
committerkn <kn@openbsd.org>
Mon, 5 Sep 2022 11:12:20 +0000 (11:12 +0000)
commit78c54f946287d90c0324773a69daab4f225b63ff
treefebae8b98f7501c7b0ab163e2d4c7ea6d935f658
parentcaca38124e771d207d206c8ffff88ec7fd813153
Fix -r on multi-chunk softraid volumes

Running installboot(8) on softraid(4) volumes means installing stages on
every softraid chunk.

The overall idea is the same, but MD implementations differ.

sparc64_softraid.c's sr_install_bootblk() reuses sparc64_installboot.c's
md_installboot() for this.

For sparc64, md_installboot() does the copy of stage 2, usually
/usr/mdec/ofwboot to /ofwboot, so when `-r root' is passed, it prefixes the
file path with "root".

For single-disk installations (plain-disk and single-chunk softraid) this is
fine, but as soon as multiple chunks are used, md_installboot() currently
prefixes the path each time, obviously resulting in invalid paths starting
with the second run.

Other architectures do reuse md_installboot() as well but either don't do
such a copy or implement the prefixing differently -- plus they must support
softraid in the firt place to be able to hit this type of bug.

With this fixed, regress/usr.sbin/installboot finally passes on sparc64 and
installboot no longer fails at the end of a fresh installation onto softraid
with multiple chunks.

"looks correct" miod
regress/usr.sbin/installboot/Makefile
usr.sbin/installboot/sparc64_installboot.c