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