[review request] zfsboot/zfsloader: support accessing
filesystems within a pool
Andriy Gapon
avg at FreeBSD.org
Sat May 5 09:53:11 UTC 2012
on 05/05/2012 12:31 Andriy Gapon said the following:
> on 04/05/2012 18:25 John Baldwin said the following:
>> On Thursday, May 03, 2012 11:23:51 am Andriy Gapon wrote:
>>> on 03/05/2012 18:02 Andriy Gapon said the following:
>>>>
>>>> Here's the latest version of the patches:
>>>> http://people.freebsd.org/~avg/zfsboot.patches.4.diff
>>>
>>> I've found a couple of problems in the previous version, so here's another one:
>>> http://people.freebsd.org/~avg/zfsboot.patches.5.diff
>>> The important change is in the first patch (__exec args).
>>
>> A few comments/suggestions on the args bits:
>
> John,
>
> these are excellent suggestions! Thank you!
The new patchset: http://people.freebsd.org/~avg/zfsboot.patches.7.diff
> Some comments:
>
>> - Please move the type of the 'kargs' struct into the new header and
>> give it a type name. Don't add the LOADER_ZFS_SUPPORT #ifdef's
>> however or the new size field (see below).
>
> Done. I've named the header and the struct "bootargs".
>
>> - Add #ifndef LOCORE guards to the new header around the structure so
>> it can be used in assembly as well as C.
>
> Done. I have had to go into a few btx makefiles and add a necessary include
> path and -DLOCORE to make the header usable from asm.
>
>> - Move BI_SIZE and ARGOFF into the header as constants.
>
> Done.
>
>> - Add a CTASSERT() in loader/main.c that BI_SIZE == sizeof(struct bootinfo)
>
> I have added a definition of CTASSERT to boostrap.h as it was not available for
> sys/boot and there were two local definitions of the macro in individual files.
>
> However the assertion would fail right now.
> The backward-compatible value of BI_SIZE (72 == 0x48) covers only part of the
> fields in struct bootinfo, those up to the following comment:
> /* Items below only from advanced bootloader */
>
> I am a little bit hesitant: should I increase BI_SIZE to cover the whole struct
> bootinfo or should I compare BI_SIZE to offsetof bi_kernend?
>
>> - Add a KA_SIZE for sizeof(struct kargs) with a CTASSERT. Use it in this
>> instruction:
>
> Done.
>
>> + addl 0x1c(%esp),%ecx # Add size of variable args
>>
>> in place of the 0x1c
>
> Done. Plus some more.
>
>> - Don't add the new 'size' field to the end of the 'struct kargs'. Instead
>> add a comment saying that if KARGS_FLAGS_EXT is set, then a structure will
>> be present at (kargs + 1) that has a int size as its first member.
>
> Done.
>
>> Maybe
>> create a 'struct kargs_ext' that looks like this:
>>
>> struct kargs_ext {
>> uint32_t size;
>> char data[0];
>> };
>
> I've decided to skip on this.
>
>> - Use 'zargs = (struct zfs_boot_args)(kargs + 1)' in loader/main.c.
>> - Change the ARGADJ line in btxcsu to be this:
>>
>> .set ARGADJ,0x1000 - ARGOFF
>
> I've decided to define ARGADJ in the new common header, then I've had to rename
> btxcsu.s to .S, so that the preprocessing is executed for it.
>
>> - If you are adventurous, you could even add a new constant ARGSPACE or some
>> such with an appropriate comment in the new header that you use to replace
>> the 0x1000 in btx.S and in the definition of ARGADJ.
>
> Done.
>
>> Hope that isn't too much, but I do think this will help make things even more
>> understandable.
>>
>
> I will send the new patch shortly.
>
--
Andriy Gapon
More information about the freebsd-fs
mailing list