Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 1 Jun 2013 20:28:51 -0400 (EDT)
From:      Rick Macklem <rmacklem@uoguelph.ca>
To:        Lars Eggert <lars@netapp.com>
Cc:        Craig Rodrigues <rodrigc@crodrigues.org>, freebsd-current <freebsd-current@freebsd.org>
Subject:   Re: mounting root from NFS via ROOTDEVNAME
Message-ID:  <30016244.120440.1370132931499.JavaMail.root@erie.cs.uoguelph.ca>
In-Reply-To: <375AA8A5-E385-4528-A460-D4B8FCB9497B@netapp.com>

next in thread | previous in thread | raw e-mail | index | archive | help
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);
> 
> _______________________________________________
> freebsd-current@freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-current
> To unsubscribe, send any mail to
> "freebsd-current-unsubscribe@freebsd.org"



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?30016244.120440.1370132931499.JavaMail.root>