Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 18 Apr 2012 08:22:23 -0600
From:      Ian Lepore <freebsd@damnhippie.dyndns.org>
To:        John Baldwin <jhb@freebsd.org>
Cc:        freebsd-fs@freebsd.org, freebsd-hackers@freebsd.org, Andriy Gapon <avg@freebsd.org>
Subject:   Re: [review request] zfsboot/zfsloader: support accessing filesystems within a pool
Message-ID:  <1334758943.1082.242.camel@revolution.hippie.lan>
In-Reply-To: <201204180941.24699.jhb@freebsd.org>
References:  <4F8999D2.1080902@FreeBSD.org> <201204171643.39447.jhb@freebsd.org> <4F8E58EE.8080909@FreeBSD.org> <201204180941.24699.jhb@freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On Wed, 2012-04-18 at 09:41 -0400, John Baldwin wrote:
> On Wednesday, April 18, 2012 2:02:22 am Andriy Gapon wrote:
> > on 17/04/2012 23:43 John Baldwin said the following:
> > > On Tuesday, April 17, 2012 4:22:19 pm Andriy Gapon wrote:
> > >> We already have a flag for ZFS (KARGS_FLAGS_ZFS, 0x4).  So the new flag could be
> > >> named something ZFS-specific (as silly as KARGS_FLAGS_ZFS2) or something more
> > >> general such as KARGS_FLAGS_32_BYTES meaning that the total size of arguments
> > >> area is 32 bytes (as opposed to 24 previously).
> > > 
> > > Does KARGS_FLAGS_GUID work?
> > > 
> > 
> > I think that's too terse, we already passed a pool guid via the existing
> > argument space.  So it should be something like KARGS_FLAGS_ZFS_FS_GUID or
> > KARGS_FLAGS_ZFS_DS_GUID (DS - dataset).
> 
> Ah.  I do think the flag should indicate that the bootinfo structure is larger,
> I was assuming you were adding a new GUID field that didn't exist before.
> I can't think of something better than KARGS_FLAGS_32.  What might be nice
> actually, is to add a new field to indicate the size of the argument area and
> to set a flag to indicate that the size field is present (KARGS_FLAGS_SIZE)?


YES!  A size field (preferably as the first field in the struct) along
with a flag to indicate that it's a new-style boot info struct that
starts with a size field, will allow future changes without a lot of
drama.  It can allow code that has to deal with the struct without
interpretting it (such as trampoline code that has to copy it to a new
stack or memory area as part of loading the kernel) to be immune to
future changes.

This probably isn't a big deal in the x86 world, but it can be important
for embedded systems where a proprietary bootloader has to pass info to
a proprietary board_init() type routine in the kernel using
non-proprietary loader/trampoline code that's part of the base.

We have a bit of a mess in this regard in the ARM world right now, and
it would be a lot lessy messy if something like this had been in place.

-- Ian





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