mounting root from NFS via ROOTDEVNAME
Eggert, Lars
lars at netapp.com
Tue May 28 15:15:53 UTC 2013
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
@@ -45,6 +45,7 @@ __FBSDID("$FreeBSD$");
#include "opt_bootp.h"
#include "opt_nfs.h"
+#include "opt_rootdevname.h"
#include <sys/param.h>
#include <sys/systm.h>
@@ -870,8 +871,20 @@ 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 */
@@ -1440,6 +1453,16 @@ 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);
More information about the freebsd-current
mailing list