Re: mounting root from NFS via ROOTDEVNAME

From: Ian Lepore <ian_at_FreeBSD.org>
Date: Sun, 02 Jun 2013 10:46:30 -0600
On Sat, 2013-06-01 at 20:28 -0400, Rick Macklem wrote:
> 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);
> > 

I've seen several requests over the past year for an nfs ROOTDEVNAME
along with BOOTP to work properly from ARM developers (myself included),
so I don't think we should worry about breaking existing config that
happens to be checked in but a) hasn't been tested by anyone for ages,
and b) doesn't work anyway (ROOTDEVNAME just gets ignored).

-- Ian
Received on Sun Jun 02 2013 - 14:46:40 UTC

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