tech-kern archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: GPT attributes in dkwedge [PATCH]



Martin Husemann wrote:

> On Sat, Sep 16, 2023 at 06:51:40AM -0000, Michael van Elst wrote:
>
> > There is one caveat. Since all x86 bootloader data is funneled through
> > the bootinfo structure we have:
> > 
> > struct btinfo_rootdevice {      
> >         struct btinfo_common common;
> >         char devname[16];       
> > };
> > 
> > So we have 16 chars to store the identifier (including a NAME= or
> > wedge: prefix), that's not enough for a UUID.
>
> So we should create btinfo_rootdevice2 and extend that size to
> something more reasonable nowadays or with variable length (and have
> the bootloader pass the extended structure if strings are longer).

You don't need to do anything fancy here with a new bootinfo type.
Because bi_add() uses the length as well the type when adding more data
to be passed to the kernel, a new /boot with a longer devname will work
with an older kernel without any problems (and vice versa).

The only corner case that an older kernel won't understand a longer root
device name passed in by a newer /boot as the old kernel will still have
the 16 char length limit.  As long as we don't expect the combination of
"old kernel", "new /boot" and "new long fancy rootpath" to work, we're
all good.

I tested these cases when playing around root-on-zfs, and am using a
devname length of 80.  On my current test box, the rootdev passed to
the kernel is "zfs:tank/ROOT/default".  I forget why I chose 80 as the
length - I guess I hit a case in testing where 64 wasn't enough.

Cheers,
Simon.


Home | Main Index | Thread Index | Old Index