nfs: skip bootpc when vfs.root.mountfrom is other than nfs

If "vfs.root.mountfrom" is set and the value is something other
than "nfs:*", it means the user doesn't want to mount root via nfs,
there's no reason to continue with bootpc

This fixes the powerpcspe kernel (MPC85XXSPE) that's compiled with
BOOTP_NFSROOT by default and gets stuck on bootpc/dhcp request loop
when no DHCP server is available on the network, even when user
specifies a local disk via "vfs.root.mountfrom" kernel parameter.

Reviewed by:	imp
MFC after:	2 weeks
Sponsored by:	Instituto de Pesquisas Eldorado (eldorado.org.br)
Differential Revision:	https://reviews.freebsd.org/D35098
This commit is contained in:
Alfredo Dal'Ava Junior 2022-05-31 16:03:43 -03:00
parent 9792c7d3eb
commit 3cb9f1976c

View File

@ -1514,6 +1514,7 @@ bootpc_init(void)
struct thread *td;
int timeout;
int delay;
char *s;
timeout = BOOTP_IFACE_WAIT_TIMEOUT * hz;
delay = hz / 10;
@ -1527,6 +1528,21 @@ bootpc_init(void)
if (nfs_diskless_valid != 0)
return;
/*
* If "vfs.root.mountfrom" is set and the value is something other
* than "nfs:", it means the user doesn't want to mount root via nfs,
* there's no reason to continue with bootpc
*/
if ((s = kern_getenv("vfs.root.mountfrom")) != NULL) {
if ((strncmp(s, "nfs:", 4)) != 0) {
printf("%s: vfs.root.mountfrom set to %s. "
"BOOTP aborted.\n", __func__, s);
freeenv(s);
return;
}
freeenv(s);
}
gctx = malloc(sizeof(*gctx), M_TEMP, M_WAITOK | M_ZERO);
STAILQ_INIT(&gctx->interfaces);
gctx->xid = ~0xFFFF;