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[]; };