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;