svn commit: r322969 - in head: sbin/mdconfig sys/dev/md sys/sys

Ryan Libby rlibby at freebsd.org
Mon Aug 28 19:52:15 UTC 2017


On Mon, Aug 28, 2017 at 11:24 AM, Maxim Sobolev <sobomax at freebsd.org> wrote:
> Hi John,
>
> Thanks for your feedback! To address the points that you've raised:
>
> 1. I've tested on both 32 and 64 bit platforms, it seems not to be the
> case. See imp's comment and my reply here
> https://reviews.freebsd.org/D10457#216855 . Did I miss something? Can you
> post piece of C code that produces different sizeof(struct old) vs.
> sizeof(struct new) on some platform?
[...]
> On Mon, Aug 28, 2017 at 9:19 AM, John Baldwin <jhb at freebsd.org> wrote:
>
>> On Monday, August 28, 2017 03:54:08 PM Maxim Sobolev wrote:
>> > Author: sobomax
>> > Date: Mon Aug 28 15:54:07 2017
>> > New Revision: 322969
>> > URL: https://svnweb.freebsd.org/changeset/base/322969
>> >
>> > Log:
>> >   Add ability to label md(4) devices.
>> >
>> >   This feature comes from the fact that we rely memory-backed md(4)
>> >   in our build process heavily. However, if the build goes haywire
>> >   the allocated resources (i.e. swap and memory-backed md(4)'s) need
>> >   to be purged. It is extremely useful to have ability to attach
>> >   arbitrary labels to each of the virtual disks so that they can
>> >   be identified and GC'ed if neecessary.
>> >
>> >   MFC after:  4 weeks
>> >   Differential Revision:      https://reviews.freebsd.org/D10457
>> >
>> > Modified:
>> >   head/sbin/mdconfig/mdconfig.8
>> >   head/sbin/mdconfig/mdconfig.c
>> >   head/sys/dev/md/md.c
>> >   head/sys/sys/mdioctl.h
>> >
>> > Modified: head/sys/sys/mdioctl.h
>> > ============================================================
>> ==================
>> > --- head/sys/sys/mdioctl.h    Mon Aug 28 14:49:26 2017        (r322968)
>> > +++ head/sys/sys/mdioctl.h    Mon Aug 28 15:54:07 2017        (r322969)
>> > @@ -49,7 +49,7 @@ enum md_types {MD_MALLOC, MD_PRELOAD, MD_VNODE, MD_SWA
>> >   * Ioctl definitions for memory disk pseudo-device.
>> >   */
>> >
>> > -#define MDNPAD               97
>> > +#define MDNPAD               96
>> >  struct md_ioctl {
>> >       unsigned        md_version;     /* Structure layout version */
>> >       unsigned        md_unit;        /* unit number */
>> > @@ -61,6 +61,7 @@ struct md_ioctl {
>> >       u_int64_t       md_base;        /* base address */
>> >       int             md_fwheads;     /* firmware heads */
>> >       int             md_fwsectors;   /* firmware sectors */
>> > +     char            *md_label;      /* label of the device */
>> >       int             md_pad[MDNPAD]; /* padding for future ideas */
>> >  };
>>
>> This isn't correct on 64-bit platforms.  MDNPAD needs to be 95 on those
>> platforms.
[...]

Can you report sizeof(md_ioctl) before and after for 32-bit and 64-bit?
I think it may be:
32-bit before: 440
32-bit after:  440
64-bit before: 448
64-bit after:  448

In other words, it looks like it used to produce different sizes on the
different architectures, and still does.  It also looks like 32-bit
before and after and 64-bit before included some undeclared padding
after md_pad, so that this would fail:
CTASSERT(sizeof(md_ioctl) == offsetof(struct md_ioctl, md_pad) +
    sizeof(((struct md_ioctl *)NULL)->md_pad));

In any case a CTASSERT(sizeof(md_ioctl) == XXX) may increase confidence
in the ABI here.


More information about the svn-src-all mailing list