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