On 3/14/23 12:15 PM, Christoph Hellwig wrote:
> On Fri, Feb 24, 2023 at 11:44:51AM -0600, Mike Christie wrote:
>> +    __u8    resv10[14];
>> +    union {
>> +            struct {
>> +                    __u8    rsvd24[40];
>> +                    struct nvme_registered_ctrl_ext regctl_eds[0];
>> +            };
>> +            struct nvme_registered_ctrl regctl_ds[0];
>> +    };
> 
> ... actually - I think both these zero sized arrays should
> be the modern [] notation.

gcc at least doesn't let you use [] on a member in a union. You get:

./include/linux/nvme.h:804:31: error: flexible array member in union
  804 |   struct nvme_registered_ctrl regctl_ds[];


We could do separate structs though:


struct nvme_registered_ctrl {
        __le16  cntlid;
        __u8    rcsts;
        __u8    rsvd3[5];
        __le64  hostid;
        __le64  rkey;
};

struct nvme_reservation_status {
        __le32  gen;
        __u8    rtype;
        __u8    regctl[2];
        __u8    resv5[2];
        __u8    ptpls;
        __u8    resv10[14];
        struct nvme_registered_ctrl regctl_ds[];
};

struct nvme_registered_ctrl_ext {
        __le16  cntlid;
        __u8    rcsts;
        __u8    rsvd3[5];
        __le64  rkey;
        __u8    hostid[16];
        __u8    rsvd32[32];
};

struct nvme_reservation_status_ext {
        __le32  gen;
        __u8    rtype;
        __u8    regctl[2];
        __u8    resv5[2];
        __u8    ptpls;
        __u8    resv10[14];
        __u8    rsvd24[40];
        struct nvme_registered_ctrl_ext regctl_eds[];
};

--
dm-devel mailing list
dm-devel@redhat.com
https://listman.redhat.com/mailman/listinfo/dm-devel

Reply via email to