Re: mounting root from NFS via ROOTDEVNAME

From: Rick Macklem <rmacklem_at_uoguelph.ca>
Date: Sat, 1 Jun 2013 20:28:51 -0400 (EDT)
Lars Eggert wrote:
> 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
> 
My only concern with this (mainly because I don't understand the rules
applied to boot alternatives well enough) is that a few arm configs have
both BOOTP, BOOTP_NFSROOT and ROOTDEVNAME specified, where ROOTDEVNAME
is set to "ufs:...". I don't think this patch will break them, since I
think they'll use NFS and ignore the ROOTDEVNAME, but I'm not completely
sure. Does someone else know how HL201 boots, for example?

Lars, if you have a src commit, you can consider this reviewed by me. If
not, maybe Craig can review it and then I'll commit it.

Thanks for doing this, rick

> 
> 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);
> 
> _______________________________________________
> freebsd-current_at_freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-current
> To unsubscribe, send any mail to
> "freebsd-current-unsubscribe_at_freebsd.org"
Received on Sat Jun 01 2013 - 22:28:59 UTC

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