[PATCH v4 07/18] nvme: Fix reservation status related structs
Mike Christie
michael.christie at oracle.com
Tue Mar 14 15:23:16 PDT 2023
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[];
};
More information about the Linux-nvme
mailing list