Re: mounting root from NFS via ROOTDEVNAME

From: Eggert, Lars <lars_at_netapp.com>
Date: Tue, 28 May 2013 15:13:02 +0000
Hi,

to conclude this thread, the patch below allows one to specify an nfs rootfs via the ROOTDEVNAME kernel option, which will be mounted when BOOTP does not return a root-path option.

Lars


diff --git a/sys/nfs/bootp_subr.c b/sys/nfs/bootp_subr.c
index 2c57a91..972fb12 100644
--- a/sys/nfs/bootp_subr.c
+++ b/sys/nfs/bootp_subr.c
_at__at_ -45,6 +45,7 _at__at_ __FBSDID("$FreeBSD$");
 
 #include "opt_bootp.h"
 #include "opt_nfs.h"
+#include "opt_rootdevname.h"
 
 #include <sys/param.h>
 #include <sys/systm.h>
_at__at_ -870,8 +871,20 _at__at_ bootpc_call(struct bootpc_globalcontext *gctx, struct thread *td)
 					rtimo = time_second +
 						BOOTP_SETTLE_DELAY;
 					printf(" (got root path)");
-				} else
+				} else {
 					printf(" (no root path)");
+#ifdef ROOTDEVNAME
+					/*
+					 * If we'll mount rootfs from
+					 * ROOTDEVNAME, we can accept
+					 * offers without root paths.
+					 */
+					gotrootpath = 1;
+					rtimo = time_second +
+						BOOTP_SETTLE_DELAY;
+					printf(" (ROOTDEVNAME)");
+#endif
+				}
 				printf("\n");
 			}
 		} /* while secs */
_at__at_ -1440,6 +1453,16 _at__at_ bootpc_decode_reply(struct nfsv3_diskless *nd, struct bootpc_ifcontext *ifctx,
 
 	p = bootpc_tag(&gctx->tag, &ifctx->reply, ifctx->replylen,
 		       TAG_ROOT);
+#ifdef ROOTDEVNAME
+	/*
+	 * If there was no root path in BOOTP, use the one in ROOTDEVNAME.
+	 */
+	if (p == NULL) {
+		p = strdup(ROOTDEVNAME, M_TEMP);
+		if (strcmp(strsep(&p, ":"), "nfs") != 0)
+			panic("ROOTDEVNAME is not an NFS mount point");
+	}
+#endif
 	if (p != NULL) {
 		if (gctx->setrootfs != NULL) {
 			printf("rootfs %s (ignored) ", p);
Received on Tue May 28 2013 - 13:15:53 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:40:38 UTC