git: 3cb9f1976c26 - main - nfs: skip bootpc when vfs.root.mountfrom is other than nfs
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Tue, 31 May 2022 19:07:43 UTC
The branch main has been updated by alfredo:
URL: https://cgit.FreeBSD.org/src/commit/?id=3cb9f1976c260821e43e6eae9d46e4ec97a8d4f1
commit 3cb9f1976c260821e43e6eae9d46e4ec97a8d4f1
Author: Alfredo Dal'Ava Junior <alfredo@FreeBSD.org>
AuthorDate: 2022-05-31 19:03:43 +0000
Commit: Alfredo Dal'Ava Junior <alfredo@FreeBSD.org>
CommitDate: 2022-05-31 19:07:27 +0000
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
---
sys/nfs/bootp_subr.c | 16 ++++++++++++++++
1 file changed, 16 insertions(+)
diff --git a/sys/nfs/bootp_subr.c b/sys/nfs/bootp_subr.c
index e64a6b40640c..62fcb06fbc5d 100644
--- a/sys/nfs/bootp_subr.c
+++ b/sys/nfs/bootp_subr.c
@@ -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;