mounting root from NFS via ROOTDEVNAME

Rick Macklem rmacklem at uoguelph.ca
Sun Jun 2 23:57:24 UTC 2013


Ian Lepore wrote:
> 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
> > > @@ -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);
> > >
> 
> 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
> 
Cool. Thanks. Would you like to review and/or test the above?

I'll be happy to commit it if Lars doesn't have a src commit bit. (I've
seen his posts, but can't remember if he is a committer?)

rick

> 
> _______________________________________________
> 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"


More information about the freebsd-current mailing list