svn commit: r322969 - in head: sbin/mdconfig sys/dev/md sys/sys
John Baldwin
jhb at freebsd.org
Tue Aug 29 19:43:43 UTC 2017
On Tuesday, August 29, 2017 12:18:18 PM Maxim Sobolev wrote:
> John, OK, maybe you are right and the current status quo was just an
> accident. I am curious what do you and other people think about expressing
> expected structure size and padding more explicitly instead of trying to
> accommodate for sometimes intricate play between alignment and type size
> with something like char[N]? I.e. along the following lines:
>
> #if __WORDSIZE < 64
Use #ifdef __LP64__
> #define MD_IOCTL_LEN 436
> #else
> #define MD_IOCTL_LEN 448
> #endif
>
> struct md_ioctl {
> union {
> struct _md_ioctl_payload {
> unsigned version; /* Structure layout version */
> unsigned unit; /* unit number */
> enum md_types type ; /* type of disk */
> char *file; /* pathname of file to mount */
> off_t mediasize; /* size of disk in bytes */
> unsigned sectorsize; /* sectorsize */
> unsigned options; /* options */
> u_int64_t base; /* base address */
> int fwheads; /* firmware heads */
> int fwsectors; /* firmware sectors */
> char *label; /* label of the device */
> } md;
> char raw[MD_IOCTL_LEN]; /* payload + padding for future ideas */
> };
> };
> CTASSERT(sizeof(struct md_ioctl) == MD_IOCTL_LEN);
This is not the style we use in other structures in FreeBSD. Simply making
the existing MDNPAD depend on the #ifdef would be more consistent. For a
really good example of how to handle padding, see kinfo_proc which has
separate "spare" arrays for int, long, void *, and char.
--
John Baldwin
More information about the svn-src-all
mailing list