Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

-Wbounds-safety-counted-by-elt-type-unknown-size in drivers/nvme/target/fc.c #2027

Closed
nathanchance opened this issue May 18, 2024 · 8 comments
Assignees
Labels
-Wbounds-safety-counted-by-elt-type-unknown-size [BUG] linux A bug that should be fixed in the mainline kernel. [FIXED][LINUX] 6.10 This bug was fixed in Linux 6.10

Comments

@nathanchance
Copy link
Member

After llvm/llvm-project@cef6387, I see the following warning in trees that contain https://git.kernel.org/linus/ccd3129aca286c41616afe357e3494c5b43350a0:

drivers/nvme/target/fc.c:151:2: warning: 'counted_by' should not be applied to an array with element of unknown size because 'struct nvmet_fc_fcp_iod' is a struct type with a flexible array member. This will be an error in a future compiler version [-Wbounds-safety-counted-by-elt-type-unknown-size]
  151 |         struct nvmet_fc_fcp_iod         fod[] __counted_by(sqsize);
      |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1 warning generated.

This seems odd to me, as it does not seem like struct nvmet_fc_fcp_iod has a flexible array member but maybe it is due to the pointer to struct nvmet_fc_tgt_queue that causes this?

struct nvmet_fc_fcp_iod {
	struct nvmefc_tgt_fcp_req	*fcpreq;

	struct nvme_fc_cmd_iu		cmdiubuf;
	struct nvme_fc_ersp_iu		rspiubuf;
	dma_addr_t			rspdma;
	struct scatterlist		*next_sg;
	struct scatterlist		*data_sg;
	int				data_sg_cnt;
	u32				offset;
	enum nvmet_fcp_datadir		io_dir;
	bool				active;
	bool				abort;
	bool				aborted;
	bool				writedataactive;
	spinlock_t			flock;

	struct nvmet_req		req;
	struct work_struct		defer_work;

	struct nvmet_fc_tgtport		*tgtport;
	struct nvmet_fc_tgt_queue	*queue;

	struct list_head		fcp_list;	/* tgtport->fcp_list */
};

struct nvmet_fc_tgt_queue {
	bool				ninetypercent;
	u16				qid;
	u16				sqsize;
	u16				ersp_ratio;
	__le16				sqhd;
	atomic_t			connected;
	atomic_t			sqtail;
	atomic_t			zrspcnt;
	atomic_t			rsn;
	spinlock_t			qlock;
	struct nvmet_cq			nvme_cq;
	struct nvmet_sq			nvme_sq;
	struct nvmet_fc_tgt_assoc	*assoc;
	struct list_head		fod_list;
	struct list_head		pending_cmd_list;
	struct list_head		avail_defer_list;
	struct workqueue_struct		*work_q;
	struct kref			ref;
	/* array of fcp_iods */
	struct nvmet_fc_fcp_iod		fod[] __counted_by(sqsize);
} __aligned(sizeof(unsigned long long));

cc @kees @bwendling

@nathanchance nathanchance added [BUG] linux A bug that should be fixed in the mainline kernel. -Wbounds-safety-counted-by-elt-type-unknown-size labels May 18, 2024
@nathanchance
Copy link
Member Author

Same thing here as the other issues?

diff --git a/drivers/nvme/target/fc.c b/drivers/nvme/target/fc.c
index 337ee1cb09ae..381b4394731f 100644
--- a/drivers/nvme/target/fc.c
+++ b/drivers/nvme/target/fc.c
@@ -148,7 +148,7 @@ struct nvmet_fc_tgt_queue {
        struct workqueue_struct         *work_q;
        struct kref                     ref;
        /* array of fcp_iods */
-       struct nvmet_fc_fcp_iod         fod[] __counted_by(sqsize);
+       struct nvmet_fc_fcp_iod         fod[] /* __counted_by(sqsize) */;
 } __aligned(sizeof(unsigned long long));

 struct nvmet_fc_hostport {

@nathanchance
Copy link
Member Author

@nathanchance nathanchance self-assigned this May 29, 2024
@nathanchance
Copy link
Member Author

@nathanchance nathanchance added the [PATCH] Submitted A patch has been submitted for review label May 29, 2024
intel-lab-lkp pushed a commit to intel-lab-lkp/linux that referenced this issue May 29, 2024
Work for __counted_by on generic pointers in structures (not just
flexible array members) has started landing in Clang 19 (current tip of
tree). During the development of this feature, a restriction was added
to __counted_by to prevent the flexible array member's element type from
including a flexible array member itself such as:

  struct foo {
    int count;
    char buf[];
  };

  struct bar {
    int count;
    struct foo data[] __counted_by(count);
  };

because the size of data cannot be calculated with the standard array
size formula:

  sizeof(struct foo) * count

This restriction was downgraded to a warning but due to CONFIG_WERROR,
it can still break the build. The application of __counted_by on the fod
member of 'struct nvmet_fc_tgt_queue' triggers this restriction,
resulting in:

  drivers/nvme/target/fc.c:151:2: error: 'counted_by' should not be applied to an array with element of unknown size because 'struct nvmet_fc_fcp_iod' is a struct type with a flexible array member. This will be an error in a future compiler version [-Werror,-Wbounds-safety-counted-by-elt-type-unknown-size]
    151 |         struct nvmet_fc_fcp_iod         fod[] __counted_by(sqsize);
        |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1 error generated.

Remove this use of __counted_by to fix the warning/error. However,
rather than remove it altogether, leave it commented, as it may be
possible to support this in future compiler releases.

Cc: stable@vger.kernel.org
Closes: ClangBuiltLinux#2027
Fixes: ccd3129 ("nvmet-fc: Annotate struct nvmet_fc_tgt_queue with __counted_by")
Signed-off-by: Nathan Chancellor <nathan@kernel.org>
@GustavoARSilva
Copy link

This seems odd to me, as it does not seem like struct nvmet_fc_fcp_iod has a flexible array member but maybe it is due to the pointer to struct nvmet_fc_tgt_queue that causes this?

If this is really caused by the pointer, I think the compiler should not report this.

@nathanchance
Copy link
Member Author

If this is really caused by the pointer, I think the compiler should not report this.

Agreed but thankfully it is not. Through the power of pahole -C nvmet_fc_fcp_iod -E, I can now see where the flexible array comes from, which is struct bio within struct nvmet_req.

struct nvmet_fc_fcp_iod {
...
	struct nvmet_req		req;
...
};

struct nvmet_req {
...
	union {
		struct {
			struct bio      inline_bio;
		} b;
		struct {
			bool			mpool_alloc;
			struct kiocb            iocb;
			struct bio_vec          *bvec;
			struct work_struct      work;
		} f;
		struct {
			struct bio		inline_bio;
			struct request		*rq;
			struct work_struct      work;
			bool			use_workqueue;
		} p;
#ifdef CONFIG_BLK_DEV_ZONED
		struct {
			struct bio		inline_bio;
			struct work_struct	zmgmt_work;
		} z;
#endif /* CONFIG_BLK_DEV_ZONED */
	};
...
};

struct bio {
...
	/*
	 * We can inline a number of vecs at the end of the bio, to avoid
	 * double allocations for a small number of bio_vecs. This member
	 * MUST obviously be kept at the very end of the bio.
	 */
	struct bio_vec		bi_inline_vecs[];
};
Full output of pahole -C nvmet_fc_fcp_iod -E
struct nvmet_fc_fcp_iod {
	struct nvmefc_tgt_fcp_req * fcpreq;                                              /*     0     8 */
	struct nvme_fc_cmd_iu {
		/* typedef __u8 */ unsigned char      format_id;                         /*     8     1 */
		/* typedef __u8 */ unsigned char      fc_id;                             /*     9     1 */
		/* typedef __be16 -> __u16 */ unsigned short     iu_len;                 /*    10     2 */
		/* typedef __u8 */ unsigned char      rsvd4[2];                          /*    12     2 */
		/* typedef __u8 */ unsigned char      rsv_cat;                           /*    14     1 */
		/* typedef __u8 */ unsigned char      flags;                             /*    15     1 */
		/* typedef __be64 -> __u64 */ unsigned long long connection_id;          /*    16     8 */
		/* typedef __be32 -> __u32 */ unsigned int       csn;                    /*    24     4 */
		/* typedef __be32 -> __u32 */ unsigned int       data_len;               /*    28     4 */
		struct nvme_command {
			union {
				struct nvme_common_command {
					/* typedef __u8 */ unsigned char opcode;         /*    32     1 */
					/* typedef __u8 */ unsigned char flags;          /*    33     1 */
					/* typedef __u16 */ unsigned short command_id;   /*    34     2 */
					/* typedef __le32 -> __u32 */ unsigned int nsid; /*    36     4 */
					/* typedef __le32 -> __u32 */ unsigned int cdw2[2]; /*    40     8 */
					/* typedef __le64 -> __u64 */ unsigned long long metadata; /*    48     8 */
					union nvme_data_ptr {
						struct {
							/* typedef __le64 -> __u64 */ unsigned long long     prp1; /*    56     8 */
							/* --- cacheline 1 boundary (64 bytes) --- */
							/* typedef __le64 -> __u64 */ unsigned long long     prp2; /*    64     8 */
						};                                       /*    56    16 */
						struct nvme_sgl_desc {
							/* typedef __le64 -> __u64 */ unsigned long long     addr; /*    56     8 */
							/* --- cacheline 1 boundary (64 bytes) --- */
							/* typedef __le32 -> __u32 */ unsigned int           length; /*    64     4 */
							/* typedef __u8 */ unsigned char          rsvd[3]; /*    68     3 */
							/* typedef __u8 */ unsigned char          type; /*    71     1 */
						} sgl; /*    56    16 */
						struct nvme_keyed_sgl_desc {
							/* typedef __le64 -> __u64 */ unsigned long long     addr; /*    56     8 */
							/* --- cacheline 1 boundary (64 bytes) --- */
							/* typedef __u8 */ unsigned char          length[3]; /*    64     3 */
							/* typedef __u8 */ unsigned char          key[4]; /*    67     4 */
							/* typedef __u8 */ unsigned char          type; /*    71     1 */
						} ksgl; /*    56    16 */
					} dptr; /*    56    16 */
					/* --- cacheline 1 boundary (64 bytes) was 8 bytes ago --- */
					union {
						struct {
							/* typedef __le32 -> __u32 */ unsigned int           cdw10; /*    72     4 */
							/* typedef __le32 -> __u32 */ unsigned int           cdw11; /*    76     4 */
							/* typedef __le32 -> __u32 */ unsigned int           cdw12; /*    80     4 */
							/* typedef __le32 -> __u32 */ unsigned int           cdw13; /*    84     4 */
							/* typedef __le32 -> __u32 */ unsigned int           cdw14; /*    88     4 */
							/* typedef __le32 -> __u32 */ unsigned int           cdw15; /*    92     4 */
						};                                       /*    72    24 */
						struct {
							/* typedef __le32 -> __u32 */ unsigned int           cdw10; /*    72     4 */
							/* typedef __le32 -> __u32 */ unsigned int           cdw11; /*    76     4 */
							/* typedef __le32 -> __u32 */ unsigned int           cdw12; /*    80     4 */
							/* typedef __le32 -> __u32 */ unsigned int           cdw13; /*    84     4 */
							/* typedef __le32 -> __u32 */ unsigned int           cdw14; /*    88     4 */
							/* typedef __le32 -> __u32 */ unsigned int           cdw15; /*    92     4 */
						} cdws;                                  /*    72    24 */
					};                                               /*    72    24 */
					union {
						struct {
							/* typedef __le32 -> __u32 */ unsigned int   cdw10; /*    32     4 */
							/* typedef __le32 -> __u32 */ unsigned int   cdw11; /*    36     4 */
							/* typedef __le32 -> __u32 */ unsigned int   cdw12; /*    40     4 */
							/* typedef __le32 -> __u32 */ unsigned int   cdw13; /*    44     4 */
							/* typedef __le32 -> __u32 */ unsigned int   cdw14; /*    48     4 */
							/* typedef __le32 -> __u32 */ unsigned int   cdw15; /*    52     4 */
						};                                               /*    32    24 */
						struct {
							/* typedef __le32 -> __u32 */ unsigned int   cdw10; /*    32     4 */
							/* typedef __le32 -> __u32 */ unsigned int   cdw11; /*    36     4 */
							/* typedef __le32 -> __u32 */ unsigned int   cdw12; /*    40     4 */
							/* typedef __le32 -> __u32 */ unsigned int   cdw13; /*    44     4 */
							/* typedef __le32 -> __u32 */ unsigned int   cdw14; /*    48     4 */
							/* typedef __le32 -> __u32 */ unsigned int   cdw15; /*    52     4 */
						} cdws;                                          /*    32    24 */
					};

				} common; /*    32    64 */
				struct nvme_rw_command {
					/* typedef __u8 */ unsigned char opcode;         /*    32     1 */
					/* typedef __u8 */ unsigned char flags;          /*    33     1 */
					/* typedef __u16 */ unsigned short command_id;   /*    34     2 */
					/* typedef __le32 -> __u32 */ unsigned int nsid; /*    36     4 */
					/* typedef __le32 -> __u32 */ unsigned int cdw2; /*    40     4 */
					/* typedef __le32 -> __u32 */ unsigned int cdw3; /*    44     4 */
					/* typedef __le64 -> __u64 */ unsigned long long metadata; /*    48     8 */
					union nvme_data_ptr {
						struct {
							/* typedef __le64 -> __u64 */ unsigned long long     prp1; /*    56     8 */
							/* --- cacheline 1 boundary (64 bytes) --- */
							/* typedef __le64 -> __u64 */ unsigned long long     prp2; /*    64     8 */
						};                                       /*    56    16 */
						struct nvme_sgl_desc {
							/* typedef __le64 -> __u64 */ unsigned long long     addr; /*    56     8 */
							/* --- cacheline 1 boundary (64 bytes) --- */
							/* typedef __le32 -> __u32 */ unsigned int           length; /*    64     4 */
							/* typedef __u8 */ unsigned char          rsvd[3]; /*    68     3 */
							/* typedef __u8 */ unsigned char          type; /*    71     1 */
						} sgl; /*    56    16 */
						struct nvme_keyed_sgl_desc {
							/* typedef __le64 -> __u64 */ unsigned long long     addr; /*    56     8 */
							/* --- cacheline 1 boundary (64 bytes) --- */
							/* typedef __u8 */ unsigned char          length[3]; /*    64     3 */
							/* typedef __u8 */ unsigned char          key[4]; /*    67     4 */
							/* typedef __u8 */ unsigned char          type; /*    71     1 */
						} ksgl; /*    56    16 */
					} dptr; /*    56    16 */
					/* --- cacheline 1 boundary (64 bytes) was 8 bytes ago --- */
					/* typedef __le64 -> __u64 */ unsigned long long slba; /*    72     8 */
					/* typedef __le16 -> __u16 */ unsigned short length; /*    80     2 */
					/* typedef __le16 -> __u16 */ unsigned short control; /*    82     2 */
					/* typedef __le32 -> __u32 */ unsigned int dsmgmt; /*    84     4 */
					/* typedef __le32 -> __u32 */ unsigned int reftag; /*    88     4 */
					/* typedef __le16 -> __u16 */ unsigned short apptag; /*    92     2 */
					/* typedef __le16 -> __u16 */ unsigned short appmask; /*    94     2 */
				} rw; /*    32    64 */
				struct nvme_identify {
					/* typedef __u8 */ unsigned char opcode;         /*    32     1 */
					/* typedef __u8 */ unsigned char flags;          /*    33     1 */
					/* typedef __u16 */ unsigned short command_id;   /*    34     2 */
					/* typedef __le32 -> __u32 */ unsigned int nsid; /*    36     4 */
					/* typedef __u64 */ unsigned long long rsvd2[2]; /*    40    16 */
					union nvme_data_ptr {
						struct {
							/* typedef __le64 -> __u64 */ unsigned long long     prp1; /*    56     8 */
							/* --- cacheline 1 boundary (64 bytes) --- */
							/* typedef __le64 -> __u64 */ unsigned long long     prp2; /*    64     8 */
						};                                       /*    56    16 */
						struct nvme_sgl_desc {
							/* typedef __le64 -> __u64 */ unsigned long long     addr; /*    56     8 */
							/* --- cacheline 1 boundary (64 bytes) --- */
							/* typedef __le32 -> __u32 */ unsigned int           length; /*    64     4 */
							/* typedef __u8 */ unsigned char          rsvd[3]; /*    68     3 */
							/* typedef __u8 */ unsigned char          type; /*    71     1 */
						} sgl; /*    56    16 */
						struct nvme_keyed_sgl_desc {
							/* typedef __le64 -> __u64 */ unsigned long long     addr; /*    56     8 */
							/* --- cacheline 1 boundary (64 bytes) --- */
							/* typedef __u8 */ unsigned char          length[3]; /*    64     3 */
							/* typedef __u8 */ unsigned char          key[4]; /*    67     4 */
							/* typedef __u8 */ unsigned char          type; /*    71     1 */
						} ksgl; /*    56    16 */
					} dptr; /*    56    16 */
					/* --- cacheline 1 boundary (64 bytes) was 8 bytes ago --- */
					/* typedef __u8 */ unsigned char cns;            /*    72     1 */
					/* typedef __u8 */ unsigned char rsvd3;          /*    73     1 */
					/* typedef __le16 -> __u16 */ unsigned short ctrlid; /*    74     2 */
					/* typedef __u8 */ unsigned char rsvd11[3];      /*    76     3 */
					/* typedef __u8 */ unsigned char csi;            /*    79     1 */
					/* typedef __u32 */ unsigned int rsvd12[4];      /*    80    16 */
				} identify; /*    32    64 */
				struct nvme_features {
					/* typedef __u8 */ unsigned char opcode;         /*    32     1 */
					/* typedef __u8 */ unsigned char flags;          /*    33     1 */
					/* typedef __u16 */ unsigned short command_id;   /*    34     2 */
					/* typedef __le32 -> __u32 */ unsigned int nsid; /*    36     4 */
					/* typedef __u64 */ unsigned long long rsvd2[2]; /*    40    16 */
					union nvme_data_ptr {
						struct {
							/* typedef __le64 -> __u64 */ unsigned long long     prp1; /*    56     8 */
							/* --- cacheline 1 boundary (64 bytes) --- */
							/* typedef __le64 -> __u64 */ unsigned long long     prp2; /*    64     8 */
						};                                       /*    56    16 */
						struct nvme_sgl_desc {
							/* typedef __le64 -> __u64 */ unsigned long long     addr; /*    56     8 */
							/* --- cacheline 1 boundary (64 bytes) --- */
							/* typedef __le32 -> __u32 */ unsigned int           length; /*    64     4 */
							/* typedef __u8 */ unsigned char          rsvd[3]; /*    68     3 */
							/* typedef __u8 */ unsigned char          type; /*    71     1 */
						} sgl; /*    56    16 */
						struct nvme_keyed_sgl_desc {
							/* typedef __le64 -> __u64 */ unsigned long long     addr; /*    56     8 */
							/* --- cacheline 1 boundary (64 bytes) --- */
							/* typedef __u8 */ unsigned char          length[3]; /*    64     3 */
							/* typedef __u8 */ unsigned char          key[4]; /*    67     4 */
							/* typedef __u8 */ unsigned char          type; /*    71     1 */
						} ksgl; /*    56    16 */
					} dptr; /*    56    16 */
					/* --- cacheline 1 boundary (64 bytes) was 8 bytes ago --- */
					/* typedef __le32 -> __u32 */ unsigned int fid;  /*    72     4 */
					/* typedef __le32 -> __u32 */ unsigned int dword11; /*    76     4 */
					/* typedef __le32 -> __u32 */ unsigned int dword12; /*    80     4 */
					/* typedef __le32 -> __u32 */ unsigned int dword13; /*    84     4 */
					/* typedef __le32 -> __u32 */ unsigned int dword14; /*    88     4 */
					/* typedef __le32 -> __u32 */ unsigned int dword15; /*    92     4 */
				} features; /*    32    64 */
				struct nvme_create_cq {
					/* typedef __u8 */ unsigned char opcode;         /*    32     1 */
					/* typedef __u8 */ unsigned char flags;          /*    33     1 */
					/* typedef __u16 */ unsigned short command_id;   /*    34     2 */
					/* typedef __u32 */ unsigned int rsvd1[5];       /*    36    20 */
					/* typedef __le64 -> __u64 */ unsigned long long prp1; /*    56     8 */
					/* --- cacheline 1 boundary (64 bytes) --- */
					/* typedef __u64 */ unsigned long long rsvd8;    /*    64     8 */
					/* typedef __le16 -> __u16 */ unsigned short cqid; /*    72     2 */
					/* typedef __le16 -> __u16 */ unsigned short qsize; /*    74     2 */
					/* typedef __le16 -> __u16 */ unsigned short cq_flags; /*    76     2 */
					/* typedef __le16 -> __u16 */ unsigned short irq_vector; /*    78     2 */
					/* typedef __u32 */ unsigned int rsvd12[4];      /*    80    16 */
				} create_cq; /*    32    64 */
				struct nvme_create_sq {
					/* typedef __u8 */ unsigned char opcode;         /*    32     1 */
					/* typedef __u8 */ unsigned char flags;          /*    33     1 */
					/* typedef __u16 */ unsigned short command_id;   /*    34     2 */
					/* typedef __u32 */ unsigned int rsvd1[5];       /*    36    20 */
					/* typedef __le64 -> __u64 */ unsigned long long prp1; /*    56     8 */
					/* --- cacheline 1 boundary (64 bytes) --- */
					/* typedef __u64 */ unsigned long long rsvd8;    /*    64     8 */
					/* typedef __le16 -> __u16 */ unsigned short sqid; /*    72     2 */
					/* typedef __le16 -> __u16 */ unsigned short qsize; /*    74     2 */
					/* typedef __le16 -> __u16 */ unsigned short sq_flags; /*    76     2 */
					/* typedef __le16 -> __u16 */ unsigned short cqid; /*    78     2 */
					/* typedef __u32 */ unsigned int rsvd12[4];      /*    80    16 */
				} create_sq; /*    32    64 */
				struct nvme_delete_queue {
					/* typedef __u8 */ unsigned char opcode;         /*    32     1 */
					/* typedef __u8 */ unsigned char flags;          /*    33     1 */
					/* typedef __u16 */ unsigned short command_id;   /*    34     2 */
					/* typedef __u32 */ unsigned int rsvd1[9];       /*    36    36 */
					/* --- cacheline 1 boundary (64 bytes) was 8 bytes ago --- */
					/* typedef __le16 -> __u16 */ unsigned short qid; /*    72     2 */
					/* typedef __u16 */ unsigned short rsvd10;       /*    74     2 */
					/* typedef __u32 */ unsigned int rsvd11[5];      /*    76    20 */
				} delete_queue; /*    32    64 */
				struct nvme_download_firmware {
					/* typedef __u8 */ unsigned char opcode;         /*    32     1 */
					/* typedef __u8 */ unsigned char flags;          /*    33     1 */
					/* typedef __u16 */ unsigned short command_id;   /*    34     2 */
					/* typedef __u32 */ unsigned int rsvd1[5];       /*    36    20 */
					union nvme_data_ptr {
						struct {
							/* typedef __le64 -> __u64 */ unsigned long long     prp1; /*    56     8 */
							/* --- cacheline 1 boundary (64 bytes) --- */
							/* typedef __le64 -> __u64 */ unsigned long long     prp2; /*    64     8 */
						};                                       /*    56    16 */
						struct nvme_sgl_desc {
							/* typedef __le64 -> __u64 */ unsigned long long     addr; /*    56     8 */
							/* --- cacheline 1 boundary (64 bytes) --- */
							/* typedef __le32 -> __u32 */ unsigned int           length; /*    64     4 */
							/* typedef __u8 */ unsigned char          rsvd[3]; /*    68     3 */
							/* typedef __u8 */ unsigned char          type; /*    71     1 */
						} sgl; /*    56    16 */
						struct nvme_keyed_sgl_desc {
							/* typedef __le64 -> __u64 */ unsigned long long     addr; /*    56     8 */
							/* --- cacheline 1 boundary (64 bytes) --- */
							/* typedef __u8 */ unsigned char          length[3]; /*    64     3 */
							/* typedef __u8 */ unsigned char          key[4]; /*    67     4 */
							/* typedef __u8 */ unsigned char          type; /*    71     1 */
						} ksgl; /*    56    16 */
					} dptr; /*    56    16 */
					/* --- cacheline 1 boundary (64 bytes) was 8 bytes ago --- */
					/* typedef __le32 -> __u32 */ unsigned int numd; /*    72     4 */
					/* typedef __le32 -> __u32 */ unsigned int offset; /*    76     4 */
					/* typedef __u32 */ unsigned int rsvd12[4];      /*    80    16 */
				} dlfw; /*    32    64 */
				struct nvme_format_cmd {
					/* typedef __u8 */ unsigned char opcode;         /*    32     1 */
					/* typedef __u8 */ unsigned char flags;          /*    33     1 */
					/* typedef __u16 */ unsigned short command_id;   /*    34     2 */
					/* typedef __le32 -> __u32 */ unsigned int nsid; /*    36     4 */
					/* typedef __u64 */ unsigned long long rsvd2[4]; /*    40    32 */
					/* --- cacheline 1 boundary (64 bytes) was 8 bytes ago --- */
					/* typedef __le32 -> __u32 */ unsigned int cdw10; /*    72     4 */
					/* typedef __u32 */ unsigned int rsvd11[5];      /*    76    20 */
				} format; /*    32    64 */
				struct nvme_dsm_cmd {
					/* typedef __u8 */ unsigned char opcode;         /*    32     1 */
					/* typedef __u8 */ unsigned char flags;          /*    33     1 */
					/* typedef __u16 */ unsigned short command_id;   /*    34     2 */
					/* typedef __le32 -> __u32 */ unsigned int nsid; /*    36     4 */
					/* typedef __u64 */ unsigned long long rsvd2[2]; /*    40    16 */
					union nvme_data_ptr {
						struct {
							/* typedef __le64 -> __u64 */ unsigned long long     prp1; /*    56     8 */
							/* --- cacheline 1 boundary (64 bytes) --- */
							/* typedef __le64 -> __u64 */ unsigned long long     prp2; /*    64     8 */
						};                                       /*    56    16 */
						struct nvme_sgl_desc {
							/* typedef __le64 -> __u64 */ unsigned long long     addr; /*    56     8 */
							/* --- cacheline 1 boundary (64 bytes) --- */
							/* typedef __le32 -> __u32 */ unsigned int           length; /*    64     4 */
							/* typedef __u8 */ unsigned char          rsvd[3]; /*    68     3 */
							/* typedef __u8 */ unsigned char          type; /*    71     1 */
						} sgl; /*    56    16 */
						struct nvme_keyed_sgl_desc {
							/* typedef __le64 -> __u64 */ unsigned long long     addr; /*    56     8 */
							/* --- cacheline 1 boundary (64 bytes) --- */
							/* typedef __u8 */ unsigned char          length[3]; /*    64     3 */
							/* typedef __u8 */ unsigned char          key[4]; /*    67     4 */
							/* typedef __u8 */ unsigned char          type; /*    71     1 */
						} ksgl; /*    56    16 */
					} dptr; /*    56    16 */
					/* --- cacheline 1 boundary (64 bytes) was 8 bytes ago --- */
					/* typedef __le32 -> __u32 */ unsigned int nr;   /*    72     4 */
					/* typedef __le32 -> __u32 */ unsigned int attributes; /*    76     4 */
					/* typedef __u32 */ unsigned int rsvd12[4];      /*    80    16 */
				} dsm; /*    32    64 */
				struct nvme_write_zeroes_cmd {
					/* typedef __u8 */ unsigned char opcode;         /*    32     1 */
					/* typedef __u8 */ unsigned char flags;          /*    33     1 */
					/* typedef __u16 */ unsigned short command_id;   /*    34     2 */
					/* typedef __le32 -> __u32 */ unsigned int nsid; /*    36     4 */
					/* typedef __u64 */ unsigned long long rsvd2;    /*    40     8 */
					/* typedef __le64 -> __u64 */ unsigned long long metadata; /*    48     8 */
					union nvme_data_ptr {
						struct {
							/* typedef __le64 -> __u64 */ unsigned long long     prp1; /*    56     8 */
							/* --- cacheline 1 boundary (64 bytes) --- */
							/* typedef __le64 -> __u64 */ unsigned long long     prp2; /*    64     8 */
						};                                       /*    56    16 */
						struct nvme_sgl_desc {
							/* typedef __le64 -> __u64 */ unsigned long long     addr; /*    56     8 */
							/* --- cacheline 1 boundary (64 bytes) --- */
							/* typedef __le32 -> __u32 */ unsigned int           length; /*    64     4 */
							/* typedef __u8 */ unsigned char          rsvd[3]; /*    68     3 */
							/* typedef __u8 */ unsigned char          type; /*    71     1 */
						} sgl; /*    56    16 */
						struct nvme_keyed_sgl_desc {
							/* typedef __le64 -> __u64 */ unsigned long long     addr; /*    56     8 */
							/* --- cacheline 1 boundary (64 bytes) --- */
							/* typedef __u8 */ unsigned char          length[3]; /*    64     3 */
							/* typedef __u8 */ unsigned char          key[4]; /*    67     4 */
							/* typedef __u8 */ unsigned char          type; /*    71     1 */
						} ksgl; /*    56    16 */
					} dptr; /*    56    16 */
					/* --- cacheline 1 boundary (64 bytes) was 8 bytes ago --- */
					/* typedef __le64 -> __u64 */ unsigned long long slba; /*    72     8 */
					/* typedef __le16 -> __u16 */ unsigned short length; /*    80     2 */
					/* typedef __le16 -> __u16 */ unsigned short control; /*    82     2 */
					/* typedef __le32 -> __u32 */ unsigned int dsmgmt; /*    84     4 */
					/* typedef __le32 -> __u32 */ unsigned int reftag; /*    88     4 */
					/* typedef __le16 -> __u16 */ unsigned short apptag; /*    92     2 */
					/* typedef __le16 -> __u16 */ unsigned short appmask; /*    94     2 */
				} write_zeroes; /*    32    64 */
				struct nvme_zone_mgmt_send_cmd {
					/* typedef __u8 */ unsigned char opcode;         /*    32     1 */
					/* typedef __u8 */ unsigned char flags;          /*    33     1 */
					/* typedef __u16 */ unsigned short command_id;   /*    34     2 */
					/* typedef __le32 -> __u32 */ unsigned int nsid; /*    36     4 */
					/* typedef __le32 -> __u32 */ unsigned int cdw2[2]; /*    40     8 */
					/* typedef __le64 -> __u64 */ unsigned long long metadata; /*    48     8 */
					union nvme_data_ptr {
						struct {
							/* typedef __le64 -> __u64 */ unsigned long long     prp1; /*    56     8 */
							/* --- cacheline 1 boundary (64 bytes) --- */
							/* typedef __le64 -> __u64 */ unsigned long long     prp2; /*    64     8 */
						};                                       /*    56    16 */
						struct nvme_sgl_desc {
							/* typedef __le64 -> __u64 */ unsigned long long     addr; /*    56     8 */
							/* --- cacheline 1 boundary (64 bytes) --- */
							/* typedef __le32 -> __u32 */ unsigned int           length; /*    64     4 */
							/* typedef __u8 */ unsigned char          rsvd[3]; /*    68     3 */
							/* typedef __u8 */ unsigned char          type; /*    71     1 */
						} sgl; /*    56    16 */
						struct nvme_keyed_sgl_desc {
							/* typedef __le64 -> __u64 */ unsigned long long     addr; /*    56     8 */
							/* --- cacheline 1 boundary (64 bytes) --- */
							/* typedef __u8 */ unsigned char          length[3]; /*    64     3 */
							/* typedef __u8 */ unsigned char          key[4]; /*    67     4 */
							/* typedef __u8 */ unsigned char          type; /*    71     1 */
						} ksgl; /*    56    16 */
					} dptr; /*    56    16 */
					/* --- cacheline 1 boundary (64 bytes) was 8 bytes ago --- */
					/* typedef __le64 -> __u64 */ unsigned long long slba; /*    72     8 */
					/* typedef __le32 -> __u32 */ unsigned int cdw12; /*    80     4 */
					/* typedef __u8 */ unsigned char zsa;            /*    84     1 */
					/* typedef __u8 */ unsigned char select_all;     /*    85     1 */
					/* typedef __u8 */ unsigned char rsvd13[2];      /*    86     2 */
					/* typedef __le32 -> __u32 */ unsigned int cdw14[2]; /*    88     8 */
				} zms; /*    32    64 */
				struct nvme_zone_mgmt_recv_cmd {
					/* typedef __u8 */ unsigned char opcode;         /*    32     1 */
					/* typedef __u8 */ unsigned char flags;          /*    33     1 */
					/* typedef __u16 */ unsigned short command_id;   /*    34     2 */
					/* typedef __le32 -> __u32 */ unsigned int nsid; /*    36     4 */
					/* typedef __le64 -> __u64 */ unsigned long long rsvd2[2]; /*    40    16 */
					union nvme_data_ptr {
						struct {
							/* typedef __le64 -> __u64 */ unsigned long long     prp1; /*    56     8 */
							/* --- cacheline 1 boundary (64 bytes) --- */
							/* typedef __le64 -> __u64 */ unsigned long long     prp2; /*    64     8 */
						};                                       /*    56    16 */
						struct nvme_sgl_desc {
							/* typedef __le64 -> __u64 */ unsigned long long     addr; /*    56     8 */
							/* --- cacheline 1 boundary (64 bytes) --- */
							/* typedef __le32 -> __u32 */ unsigned int           length; /*    64     4 */
							/* typedef __u8 */ unsigned char          rsvd[3]; /*    68     3 */
							/* typedef __u8 */ unsigned char          type; /*    71     1 */
						} sgl; /*    56    16 */
						struct nvme_keyed_sgl_desc {
							/* typedef __le64 -> __u64 */ unsigned long long     addr; /*    56     8 */
							/* --- cacheline 1 boundary (64 bytes) --- */
							/* typedef __u8 */ unsigned char          length[3]; /*    64     3 */
							/* typedef __u8 */ unsigned char          key[4]; /*    67     4 */
							/* typedef __u8 */ unsigned char          type; /*    71     1 */
						} ksgl; /*    56    16 */
					} dptr; /*    56    16 */
					/* --- cacheline 1 boundary (64 bytes) was 8 bytes ago --- */
					/* typedef __le64 -> __u64 */ unsigned long long slba; /*    72     8 */
					/* typedef __le32 -> __u32 */ unsigned int numd; /*    80     4 */
					/* typedef __u8 */ unsigned char zra;            /*    84     1 */
					/* typedef __u8 */ unsigned char zrasf;          /*    85     1 */
					/* typedef __u8 */ unsigned char pr;             /*    86     1 */
					/* typedef __u8 */ unsigned char rsvd13;         /*    87     1 */
					/* typedef __le32 -> __u32 */ unsigned int cdw14[2]; /*    88     8 */
				} zmr; /*    32    64 */
				struct nvme_abort_cmd {
					/* typedef __u8 */ unsigned char opcode;         /*    32     1 */
					/* typedef __u8 */ unsigned char flags;          /*    33     1 */
					/* typedef __u16 */ unsigned short command_id;   /*    34     2 */
					/* typedef __u32 */ unsigned int rsvd1[9];       /*    36    36 */
					/* --- cacheline 1 boundary (64 bytes) was 8 bytes ago --- */
					/* typedef __le16 -> __u16 */ unsigned short sqid; /*    72     2 */
					/* typedef __u16 */ unsigned short cid;          /*    74     2 */
					/* typedef __u32 */ unsigned int rsvd11[5];      /*    76    20 */
				} abort; /*    32    64 */
				struct nvme_get_log_page_command {
					/* typedef __u8 */ unsigned char opcode;         /*    32     1 */
					/* typedef __u8 */ unsigned char flags;          /*    33     1 */
					/* typedef __u16 */ unsigned short command_id;   /*    34     2 */
					/* typedef __le32 -> __u32 */ unsigned int nsid; /*    36     4 */
					/* typedef __u64 */ unsigned long long rsvd2[2]; /*    40    16 */
					union nvme_data_ptr {
						struct {
							/* typedef __le64 -> __u64 */ unsigned long long     prp1; /*    56     8 */
							/* --- cacheline 1 boundary (64 bytes) --- */
							/* typedef __le64 -> __u64 */ unsigned long long     prp2; /*    64     8 */
						};                                       /*    56    16 */
						struct nvme_sgl_desc {
							/* typedef __le64 -> __u64 */ unsigned long long     addr; /*    56     8 */
							/* --- cacheline 1 boundary (64 bytes) --- */
							/* typedef __le32 -> __u32 */ unsigned int           length; /*    64     4 */
							/* typedef __u8 */ unsigned char          rsvd[3]; /*    68     3 */
							/* typedef __u8 */ unsigned char          type; /*    71     1 */
						} sgl; /*    56    16 */
						struct nvme_keyed_sgl_desc {
							/* typedef __le64 -> __u64 */ unsigned long long     addr; /*    56     8 */
							/* --- cacheline 1 boundary (64 bytes) --- */
							/* typedef __u8 */ unsigned char          length[3]; /*    64     3 */
							/* typedef __u8 */ unsigned char          key[4]; /*    67     4 */
							/* typedef __u8 */ unsigned char          type; /*    71     1 */
						} ksgl; /*    56    16 */
					} dptr; /*    56    16 */
					/* --- cacheline 1 boundary (64 bytes) was 8 bytes ago --- */
					/* typedef __u8 */ unsigned char lid;            /*    72     1 */
					/* typedef __u8 */ unsigned char lsp;            /*    73     1 */
					/* typedef __le16 -> __u16 */ unsigned short numdl; /*    74     2 */
					/* typedef __le16 -> __u16 */ unsigned short numdu; /*    76     2 */
					/* typedef __u16 */ unsigned short rsvd11;       /*    78     2 */
					union {
						struct {
							/* typedef __le32 -> __u32 */ unsigned int           lpol; /*    80     4 */
							/* typedef __le32 -> __u32 */ unsigned int           lpou; /*    84     4 */
						};                                       /*    80     8 */
						/* typedef __le64 -> __u64 */ unsigned long long lpo; /*    80     8 */
					};                                               /*    80     8 */
					union {
						struct {
							/* typedef __le32 -> __u32 */ unsigned int   lpol; /*    32     4 */
							/* typedef __le32 -> __u32 */ unsigned int   lpou; /*    36     4 */
						};                                               /*    32     8 */
						/* typedef __le64 -> __u64 */ unsigned long long lpo; /*    32     8 */
					};

					/* typedef __u8 */ unsigned char rsvd14[3];      /*    88     3 */
					/* typedef __u8 */ unsigned char csi;            /*    91     1 */
					/* typedef __u32 */ unsigned int rsvd15;         /*    92     4 */
				} get_log_page; /*    32    64 */
				struct nvmf_common_command {
					/* typedef __u8 */ unsigned char opcode;         /*    32     1 */
					/* typedef __u8 */ unsigned char resv1;          /*    33     1 */
					/* typedef __u16 */ unsigned short command_id;   /*    34     2 */
					/* typedef __u8 */ unsigned char fctype;         /*    36     1 */
					/* typedef __u8 */ unsigned char resv2[35];      /*    37    35 */
					/* --- cacheline 1 boundary (64 bytes) was 8 bytes ago --- */
					/* typedef __u8 */ unsigned char ts[24];         /*    72    24 */
				} fabrics; /*    32    64 */
				struct nvmf_connect_command {
					/* typedef __u8 */ unsigned char opcode;         /*    32     1 */
					/* typedef __u8 */ unsigned char resv1;          /*    33     1 */
					/* typedef __u16 */ unsigned short command_id;   /*    34     2 */
					/* typedef __u8 */ unsigned char fctype;         /*    36     1 */
					/* typedef __u8 */ unsigned char resv2[19];      /*    37    19 */
					union nvme_data_ptr {
						struct {
							/* typedef __le64 -> __u64 */ unsigned long long     prp1; /*    56     8 */
							/* --- cacheline 1 boundary (64 bytes) --- */
							/* typedef __le64 -> __u64 */ unsigned long long     prp2; /*    64     8 */
						};                                       /*    56    16 */
						struct nvme_sgl_desc {
							/* typedef __le64 -> __u64 */ unsigned long long     addr; /*    56     8 */
							/* --- cacheline 1 boundary (64 bytes) --- */
							/* typedef __le32 -> __u32 */ unsigned int           length; /*    64     4 */
							/* typedef __u8 */ unsigned char          rsvd[3]; /*    68     3 */
							/* typedef __u8 */ unsigned char          type; /*    71     1 */
						} sgl; /*    56    16 */
						struct nvme_keyed_sgl_desc {
							/* typedef __le64 -> __u64 */ unsigned long long     addr; /*    56     8 */
							/* --- cacheline 1 boundary (64 bytes) --- */
							/* typedef __u8 */ unsigned char          length[3]; /*    64     3 */
							/* typedef __u8 */ unsigned char          key[4]; /*    67     4 */
							/* typedef __u8 */ unsigned char          type; /*    71     1 */
						} ksgl; /*    56    16 */
					} dptr; /*    56    16 */
					/* --- cacheline 1 boundary (64 bytes) was 8 bytes ago --- */
					/* typedef __le16 -> __u16 */ unsigned short recfmt; /*    72     2 */
					/* typedef __le16 -> __u16 */ unsigned short qid; /*    74     2 */
					/* typedef __le16 -> __u16 */ unsigned short sqsize; /*    76     2 */
					/* typedef __u8 */ unsigned char cattr;          /*    78     1 */
					/* typedef __u8 */ unsigned char resv3;          /*    79     1 */
					/* typedef __le32 -> __u32 */ unsigned int kato; /*    80     4 */
					/* typedef __u8 */ unsigned char resv4[12];      /*    84    12 */
				} connect; /*    32    64 */
				struct nvmf_property_set_command {
					/* typedef __u8 */ unsigned char opcode;         /*    32     1 */
					/* typedef __u8 */ unsigned char resv1;          /*    33     1 */
					/* typedef __u16 */ unsigned short command_id;   /*    34     2 */
					/* typedef __u8 */ unsigned char fctype;         /*    36     1 */
					/* typedef __u8 */ unsigned char resv2[35];      /*    37    35 */
					/* --- cacheline 1 boundary (64 bytes) was 8 bytes ago --- */
					/* typedef __u8 */ unsigned char attrib;         /*    72     1 */
					/* typedef __u8 */ unsigned char resv3[3];       /*    73     3 */
					/* typedef __le32 -> __u32 */ unsigned int offset; /*    76     4 */
					/* typedef __le64 -> __u64 */ unsigned long long value; /*    80     8 */
					/* typedef __u8 */ unsigned char resv4[8];       /*    88     8 */
				} prop_set; /*    32    64 */
				struct nvmf_property_get_command {
					/* typedef __u8 */ unsigned char opcode;         /*    32     1 */
					/* typedef __u8 */ unsigned char resv1;          /*    33     1 */
					/* typedef __u16 */ unsigned short command_id;   /*    34     2 */
					/* typedef __u8 */ unsigned char fctype;         /*    36     1 */
					/* typedef __u8 */ unsigned char resv2[35];      /*    37    35 */
					/* --- cacheline 1 boundary (64 bytes) was 8 bytes ago --- */
					/* typedef __u8 */ unsigned char attrib;         /*    72     1 */
					/* typedef __u8 */ unsigned char resv3[3];       /*    73     3 */
					/* typedef __le32 -> __u32 */ unsigned int offset; /*    76     4 */
					/* typedef __u8 */ unsigned char resv4[16];      /*    80    16 */
				} prop_get; /*    32    64 */
				struct nvmf_auth_common_command {
					/* typedef __u8 */ unsigned char opcode;         /*    32     1 */
					/* typedef __u8 */ unsigned char resv1;          /*    33     1 */
					/* typedef __u16 */ unsigned short command_id;   /*    34     2 */
					/* typedef __u8 */ unsigned char fctype;         /*    36     1 */
					/* typedef __u8 */ unsigned char resv2[19];      /*    37    19 */
					union nvme_data_ptr {
						struct {
							/* typedef __le64 -> __u64 */ unsigned long long     prp1; /*    56     8 */
							/* --- cacheline 1 boundary (64 bytes) --- */
							/* typedef __le64 -> __u64 */ unsigned long long     prp2; /*    64     8 */
						};                                       /*    56    16 */
						struct nvme_sgl_desc {
							/* typedef __le64 -> __u64 */ unsigned long long     addr; /*    56     8 */
							/* --- cacheline 1 boundary (64 bytes) --- */
							/* typedef __le32 -> __u32 */ unsigned int           length; /*    64     4 */
							/* typedef __u8 */ unsigned char          rsvd[3]; /*    68     3 */
							/* typedef __u8 */ unsigned char          type; /*    71     1 */
						} sgl; /*    56    16 */
						struct nvme_keyed_sgl_desc {
							/* typedef __le64 -> __u64 */ unsigned long long     addr; /*    56     8 */
							/* --- cacheline 1 boundary (64 bytes) --- */
							/* typedef __u8 */ unsigned char          length[3]; /*    64     3 */
							/* typedef __u8 */ unsigned char          key[4]; /*    67     4 */
							/* typedef __u8 */ unsigned char          type; /*    71     1 */
						} ksgl; /*    56    16 */
					} dptr; /*    56    16 */
					/* --- cacheline 1 boundary (64 bytes) was 8 bytes ago --- */
					/* typedef __u8 */ unsigned char resv3;          /*    72     1 */
					/* typedef __u8 */ unsigned char spsp0;          /*    73     1 */
					/* typedef __u8 */ unsigned char spsp1;          /*    74     1 */
					/* typedef __u8 */ unsigned char secp;           /*    75     1 */
					/* typedef __le32 -> __u32 */ unsigned int al_tl; /*    76     4 */
					/* typedef __u8 */ unsigned char resv4[16];      /*    80    16 */
				} auth_common; /*    32    64 */
				struct nvmf_auth_send_command {
					/* typedef __u8 */ unsigned char opcode;         /*    32     1 */
					/* typedef __u8 */ unsigned char resv1;          /*    33     1 */
					/* typedef __u16 */ unsigned short command_id;   /*    34     2 */
					/* typedef __u8 */ unsigned char fctype;         /*    36     1 */
					/* typedef __u8 */ unsigned char resv2[19];      /*    37    19 */
					union nvme_data_ptr {
						struct {
							/* typedef __le64 -> __u64 */ unsigned long long     prp1; /*    56     8 */
							/* --- cacheline 1 boundary (64 bytes) --- */
							/* typedef __le64 -> __u64 */ unsigned long long     prp2; /*    64     8 */
						};                                       /*    56    16 */
						struct nvme_sgl_desc {
							/* typedef __le64 -> __u64 */ unsigned long long     addr; /*    56     8 */
							/* --- cacheline 1 boundary (64 bytes) --- */
							/* typedef __le32 -> __u32 */ unsigned int           length; /*    64     4 */
							/* typedef __u8 */ unsigned char          rsvd[3]; /*    68     3 */
							/* typedef __u8 */ unsigned char          type; /*    71     1 */
						} sgl; /*    56    16 */
						struct nvme_keyed_sgl_desc {
							/* typedef __le64 -> __u64 */ unsigned long long     addr; /*    56     8 */
							/* --- cacheline 1 boundary (64 bytes) --- */
							/* typedef __u8 */ unsigned char          length[3]; /*    64     3 */
							/* typedef __u8 */ unsigned char          key[4]; /*    67     4 */
							/* typedef __u8 */ unsigned char          type; /*    71     1 */
						} ksgl; /*    56    16 */
					} dptr; /*    56    16 */
					/* --- cacheline 1 boundary (64 bytes) was 8 bytes ago --- */
					/* typedef __u8 */ unsigned char resv3;          /*    72     1 */
					/* typedef __u8 */ unsigned char spsp0;          /*    73     1 */
					/* typedef __u8 */ unsigned char spsp1;          /*    74     1 */
					/* typedef __u8 */ unsigned char secp;           /*    75     1 */
					/* typedef __le32 -> __u32 */ unsigned int tl;   /*    76     4 */
					/* typedef __u8 */ unsigned char resv4[16];      /*    80    16 */
				} auth_send; /*    32    64 */
				struct nvmf_auth_receive_command {
					/* typedef __u8 */ unsigned char opcode;         /*    32     1 */
					/* typedef __u8 */ unsigned char resv1;          /*    33     1 */
					/* typedef __u16 */ unsigned short command_id;   /*    34     2 */
					/* typedef __u8 */ unsigned char fctype;         /*    36     1 */
					/* typedef __u8 */ unsigned char resv2[19];      /*    37    19 */
					union nvme_data_ptr {
						struct {
							/* typedef __le64 -> __u64 */ unsigned long long     prp1; /*    56     8 */
							/* --- cacheline 1 boundary (64 bytes) --- */
							/* typedef __le64 -> __u64 */ unsigned long long     prp2; /*    64     8 */
						};                                       /*    56    16 */
						struct nvme_sgl_desc {
							/* typedef __le64 -> __u64 */ unsigned long long     addr; /*    56     8 */
							/* --- cacheline 1 boundary (64 bytes) --- */
							/* typedef __le32 -> __u32 */ unsigned int           length; /*    64     4 */
							/* typedef __u8 */ unsigned char          rsvd[3]; /*    68     3 */
							/* typedef __u8 */ unsigned char          type; /*    71     1 */
						} sgl; /*    56    16 */
						struct nvme_keyed_sgl_desc {
							/* typedef __le64 -> __u64 */ unsigned long long     addr; /*    56     8 */
							/* --- cacheline 1 boundary (64 bytes) --- */
							/* typedef __u8 */ unsigned char          length[3]; /*    64     3 */
							/* typedef __u8 */ unsigned char          key[4]; /*    67     4 */
							/* typedef __u8 */ unsigned char          type; /*    71     1 */
						} ksgl; /*    56    16 */
					} dptr; /*    56    16 */
					/* --- cacheline 1 boundary (64 bytes) was 8 bytes ago --- */
					/* typedef __u8 */ unsigned char resv3;          /*    72     1 */
					/* typedef __u8 */ unsigned char spsp0;          /*    73     1 */
					/* typedef __u8 */ unsigned char spsp1;          /*    74     1 */
					/* typedef __u8 */ unsigned char secp;           /*    75     1 */
					/* typedef __le32 -> __u32 */ unsigned int al;   /*    76     4 */
					/* typedef __u8 */ unsigned char resv4[16];      /*    80    16 */
				} auth_receive; /*    32    64 */
				struct nvme_dbbuf {
					/* typedef __u8 */ unsigned char opcode;         /*    32     1 */
					/* typedef __u8 */ unsigned char flags;          /*    33     1 */
					/* typedef __u16 */ unsigned short command_id;   /*    34     2 */
					/* typedef __u32 */ unsigned int rsvd1[5];       /*    36    20 */
					/* typedef __le64 -> __u64 */ unsigned long long prp1; /*    56     8 */
					/* --- cacheline 1 boundary (64 bytes) --- */
					/* typedef __le64 -> __u64 */ unsigned long long prp2; /*    64     8 */
					/* typedef __u32 */ unsigned int rsvd12[6];      /*    72    24 */
				} dbbuf; /*    32    64 */
				struct nvme_directive_cmd {
					/* typedef __u8 */ unsigned char opcode;         /*    32     1 */
					/* typedef __u8 */ unsigned char flags;          /*    33     1 */
					/* typedef __u16 */ unsigned short command_id;   /*    34     2 */
					/* typedef __le32 -> __u32 */ unsigned int nsid; /*    36     4 */
					/* typedef __u64 */ unsigned long long rsvd2[2]; /*    40    16 */
					union nvme_data_ptr {
						struct {
							/* typedef __le64 -> __u64 */ unsigned long long     prp1; /*    56     8 */
							/* --- cacheline 1 boundary (64 bytes) --- */
							/* typedef __le64 -> __u64 */ unsigned long long     prp2; /*    64     8 */
						};                                       /*    56    16 */
						struct nvme_sgl_desc {
							/* typedef __le64 -> __u64 */ unsigned long long     addr; /*    56     8 */
							/* --- cacheline 1 boundary (64 bytes) --- */
							/* typedef __le32 -> __u32 */ unsigned int           length; /*    64     4 */
							/* typedef __u8 */ unsigned char          rsvd[3]; /*    68     3 */
							/* typedef __u8 */ unsigned char          type; /*    71     1 */
						} sgl; /*    56    16 */
						struct nvme_keyed_sgl_desc {
							/* typedef __le64 -> __u64 */ unsigned long long     addr; /*    56     8 */
							/* --- cacheline 1 boundary (64 bytes) --- */
							/* typedef __u8 */ unsigned char          length[3]; /*    64     3 */
							/* typedef __u8 */ unsigned char          key[4]; /*    67     4 */
							/* typedef __u8 */ unsigned char          type; /*    71     1 */
						} ksgl; /*    56    16 */
					} dptr; /*    56    16 */
					/* --- cacheline 1 boundary (64 bytes) was 8 bytes ago --- */
					/* typedef __le32 -> __u32 */ unsigned int numd; /*    72     4 */
					/* typedef __u8 */ unsigned char doper;          /*    76     1 */
					/* typedef __u8 */ unsigned char dtype;          /*    77     1 */
					/* typedef __le16 -> __u16 */ unsigned short dspec; /*    78     2 */
					/* typedef __u8 */ unsigned char endir;          /*    80     1 */
					/* typedef __u8 */ unsigned char tdtype;         /*    81     1 */
					/* typedef __u16 */ unsigned short rsvd15;       /*    82     2 */
					/* typedef __u32 */ unsigned int rsvd16[3];      /*    84    12 */
				} directive; /*    32    64 */
			};                                                               /*    32    64 */
			union {
				struct nvme_common_command {
					/* typedef __u8 */ unsigned char opcode;                 /*    32     1 */
					/* typedef __u8 */ unsigned char flags;                  /*    33     1 */
					/* typedef __u16 */ unsigned short command_id;           /*    34     2 */
					/* typedef __le32 -> __u32 */ unsigned int nsid;         /*    36     4 */
					/* typedef __le32 -> __u32 */ unsigned int cdw2[2];      /*    40     8 */
					/* typedef __le64 -> __u64 */ unsigned long long metadata; /*    48     8 */
					union nvme_data_ptr {
						struct {
							/* typedef __le64 -> __u64 */ unsigned long long prp1; /*    56     8 */
							/* --- cacheline 1 boundary (64 bytes) --- */
							/* typedef __le64 -> __u64 */ unsigned long long prp2; /*    64     8 */
						};                                               /*    56    16 */
						struct nvme_sgl_desc {
							/* typedef __le64 -> __u64 */ unsigned long long addr; /*    56     8 */
							/* --- cacheline 1 boundary (64 bytes) --- */
							/* typedef __le32 -> __u32 */ unsigned int   length; /*    64     4 */
							/* typedef __u8 */ unsigned char  rsvd[3]; /*    68     3 */
							/* typedef __u8 */ unsigned char  type;  /*    71     1 */
						} sgl; /*    56    16 */
						struct nvme_keyed_sgl_desc {
							/* typedef __le64 -> __u64 */ unsigned long long addr; /*    56     8 */
							/* --- cacheline 1 boundary (64 bytes) --- */
							/* typedef __u8 */ unsigned char  length[3]; /*    64     3 */
							/* typedef __u8 */ unsigned char  key[4]; /*    67     4 */
							/* typedef __u8 */ unsigned char  type;  /*    71     1 */
						} ksgl; /*    56    16 */
					} dptr; /*    56    16 */
					/* --- cacheline 1 boundary (64 bytes) was 8 bytes ago --- */
					union {
						struct {
							/* typedef __le32 -> __u32 */ unsigned int   cdw10; /*    72     4 */
							/* typedef __le32 -> __u32 */ unsigned int   cdw11; /*    76     4 */
							/* typedef __le32 -> __u32 */ unsigned int   cdw12; /*    80     4 */
							/* typedef __le32 -> __u32 */ unsigned int   cdw13; /*    84     4 */
							/* typedef __le32 -> __u32 */ unsigned int   cdw14; /*    88     4 */
							/* typedef __le32 -> __u32 */ unsigned int   cdw15; /*    92     4 */
						};                                               /*    72    24 */
						struct {
							/* typedef __le32 -> __u32 */ unsigned int   cdw10; /*    72     4 */
							/* typedef __le32 -> __u32 */ unsigned int   cdw11; /*    76     4 */
							/* typedef __le32 -> __u32 */ unsigned int   cdw12; /*    80     4 */
							/* typedef __le32 -> __u32 */ unsigned int   cdw13; /*    84     4 */
							/* typedef __le32 -> __u32 */ unsigned int   cdw14; /*    88     4 */
							/* typedef __le32 -> __u32 */ unsigned int   cdw15; /*    92     4 */
						} cdws;                                          /*    72    24 */
					};                                                       /*    72    24 */
					union {
						struct {
							/* typedef __le32 -> __u32 */ unsigned int cdw10; /*    32     4 */
							/* typedef __le32 -> __u32 */ unsigned int cdw11; /*    36     4 */
							/* typedef __le32 -> __u32 */ unsigned int cdw12; /*    40     4 */
							/* typedef __le32 -> __u32 */ unsigned int cdw13; /*    44     4 */
							/* typedef __le32 -> __u32 */ unsigned int cdw14; /*    48     4 */
							/* typedef __le32 -> __u32 */ unsigned int cdw15; /*    52     4 */
						};                                                       /*    32    24 */
						struct {
							/* typedef __le32 -> __u32 */ unsigned int cdw10; /*    32     4 */
							/* typedef __le32 -> __u32 */ unsigned int cdw11; /*    36     4 */
							/* typedef __le32 -> __u32 */ unsigned int cdw12; /*    40     4 */
							/* typedef __le32 -> __u32 */ unsigned int cdw13; /*    44     4 */
							/* typedef __le32 -> __u32 */ unsigned int cdw14; /*    48     4 */
							/* typedef __le32 -> __u32 */ unsigned int cdw15; /*    52     4 */
						} cdws;                                                  /*    32    24 */
					};

				} common; /*    32    64 */
				struct nvme_rw_command {
					/* typedef __u8 */ unsigned char opcode;                 /*    32     1 */
					/* typedef __u8 */ unsigned char flags;                  /*    33     1 */
					/* typedef __u16 */ unsigned short command_id;           /*    34     2 */
					/* typedef __le32 -> __u32 */ unsigned int nsid;         /*    36     4 */
					/* typedef __le32 -> __u32 */ unsigned int cdw2;         /*    40     4 */
					/* typedef __le32 -> __u32 */ unsigned int cdw3;         /*    44     4 */
					/* typedef __le64 -> __u64 */ unsigned long long metadata; /*    48     8 */
					union nvme_data_ptr {
						struct {
							/* typedef __le64 -> __u64 */ unsigned long long prp1; /*    56     8 */
							/* --- cacheline 1 boundary (64 bytes) --- */
							/* typedef __le64 -> __u64 */ unsigned long long prp2; /*    64     8 */
						};                                               /*    56    16 */
						struct nvme_sgl_desc {
							/* typedef __le64 -> __u64 */ unsigned long long addr; /*    56     8 */
							/* --- cacheline 1 boundary (64 bytes) --- */
							/* typedef __le32 -> __u32 */ unsigned int   length; /*    64     4 */
							/* typedef __u8 */ unsigned char  rsvd[3]; /*    68     3 */
							/* typedef __u8 */ unsigned char  type;  /*    71     1 */
						} sgl; /*    56    16 */
						struct nvme_keyed_sgl_desc {
							/* typedef __le64 -> __u64 */ unsigned long long addr; /*    56     8 */
							/* --- cacheline 1 boundary (64 bytes) --- */
							/* typedef __u8 */ unsigned char  length[3]; /*    64     3 */
							/* typedef __u8 */ unsigned char  key[4]; /*    67     4 */
							/* typedef __u8 */ unsigned char  type;  /*    71     1 */
						} ksgl; /*    56    16 */
					} dptr; /*    56    16 */
					/* --- cacheline 1 boundary (64 bytes) was 8 bytes ago --- */
					/* typedef __le64 -> __u64 */ unsigned long long slba;   /*    72     8 */
					/* typedef __le16 -> __u16 */ unsigned short length;     /*    80     2 */
					/* typedef __le16 -> __u16 */ unsigned short control;    /*    82     2 */
					/* typedef __le32 -> __u32 */ unsigned int dsmgmt;       /*    84     4 */
					/* typedef __le32 -> __u32 */ unsigned int reftag;       /*    88     4 */
					/* typedef __le16 -> __u16 */ unsigned short apptag;     /*    92     2 */
					/* typedef __le16 -> __u16 */ unsigned short appmask;    /*    94     2 */
				} rw; /*    32    64 */
				struct nvme_identify {
					/* typedef __u8 */ unsigned char opcode;                 /*    32     1 */
					/* typedef __u8 */ unsigned char flags;                  /*    33     1 */
					/* typedef __u16 */ unsigned short command_id;           /*    34     2 */
					/* typedef __le32 -> __u32 */ unsigned int nsid;         /*    36     4 */
					/* typedef __u64 */ unsigned long long rsvd2[2];         /*    40    16 */
					union nvme_data_ptr {
						struct {
							/* typedef __le64 -> __u64 */ unsigned long long prp1; /*    56     8 */
							/* --- cacheline 1 boundary (64 bytes) --- */
							/* typedef __le64 -> __u64 */ unsigned long long prp2; /*    64     8 */
						};                                               /*    56    16 */
						struct nvme_sgl_desc {
							/* typedef __le64 -> __u64 */ unsigned long long addr; /*    56     8 */
							/* --- cacheline 1 boundary (64 bytes) --- */
							/* typedef __le32 -> __u32 */ unsigned int   length; /*    64     4 */
							/* typedef __u8 */ unsigned char  rsvd[3]; /*    68     3 */
							/* typedef __u8 */ unsigned char  type;  /*    71     1 */
						} sgl; /*    56    16 */
						struct nvme_keyed_sgl_desc {
							/* typedef __le64 -> __u64 */ unsigned long long addr; /*    56     8 */
							/* --- cacheline 1 boundary (64 bytes) --- */
							/* typedef __u8 */ unsigned char  length[3]; /*    64     3 */
							/* typedef __u8 */ unsigned char  key[4]; /*    67     4 */
							/* typedef __u8 */ unsigned char  type;  /*    71     1 */
						} ksgl; /*    56    16 */
					} dptr; /*    56    16 */
					/* --- cacheline 1 boundary (64 bytes) was 8 bytes ago --- */
					/* typedef __u8 */ unsigned char cns;                    /*    72     1 */
					/* typedef __u8 */ unsigned char rsvd3;                  /*    73     1 */
					/* typedef __le16 -> __u16 */ unsigned short ctrlid;     /*    74     2 */
					/* typedef __u8 */ unsigned char rsvd11[3];              /*    76     3 */
					/* typedef __u8 */ unsigned char csi;                    /*    79     1 */
					/* typedef __u32 */ unsigned int rsvd12[4];              /*    80    16 */
				} identify; /*    32    64 */
				struct nvme_features {
					/* typedef __u8 */ unsigned char opcode;                 /*    32     1 */
					/* typedef __u8 */ unsigned char flags;                  /*    33     1 */
					/* typedef __u16 */ unsigned short command_id;           /*    34     2 */
					/* typedef __le32 -> __u32 */ unsigned int nsid;         /*    36     4 */
					/* typedef __u64 */ unsigned long long rsvd2[2];         /*    40    16 */
					union nvme_data_ptr {
						struct {
							/* typedef __le64 -> __u64 */ unsigned long long prp1; /*    56     8 */
							/* --- cacheline 1 boundary (64 bytes) --- */
							/* typedef __le64 -> __u64 */ unsigned long long prp2; /*    64     8 */
						};                                               /*    56    16 */
						struct nvme_sgl_desc {
							/* typedef __le64 -> __u64 */ unsigned long long addr; /*    56     8 */
							/* --- cacheline 1 boundary (64 bytes) --- */
							/* typedef __le32 -> __u32 */ unsigned int   length; /*    64     4 */
							/* typedef __u8 */ unsigned char  rsvd[3]; /*    68     3 */
							/* typedef __u8 */ unsigned char  type;  /*    71     1 */
						} sgl; /*    56    16 */
						struct nvme_keyed_sgl_desc {
							/* typedef __le64 -> __u64 */ unsigned long long addr; /*    56     8 */
							/* --- cacheline 1 boundary (64 bytes) --- */
							/* typedef __u8 */ unsigned char  length[3]; /*    64     3 */
							/* typedef __u8 */ unsigned char  key[4]; /*    67     4 */
							/* typedef __u8 */ unsigned char  type;  /*    71     1 */
						} ksgl; /*    56    16 */
					} dptr; /*    56    16 */
					/* --- cacheline 1 boundary (64 bytes) was 8 bytes ago --- */
					/* typedef __le32 -> __u32 */ unsigned int fid;          /*    72     4 */
					/* typedef __le32 -> __u32 */ unsigned int dword11;      /*    76     4 */
					/* typedef __le32 -> __u32 */ unsigned int dword12;      /*    80     4 */
					/* typedef __le32 -> __u32 */ unsigned int dword13;      /*    84     4 */
					/* typedef __le32 -> __u32 */ unsigned int dword14;      /*    88     4 */
					/* typedef __le32 -> __u32 */ unsigned int dword15;      /*    92     4 */
				} features; /*    32    64 */
				struct nvme_create_cq {
					/* typedef __u8 */ unsigned char opcode;                 /*    32     1 */
					/* typedef __u8 */ unsigned char flags;                  /*    33     1 */
					/* typedef __u16 */ unsigned short command_id;           /*    34     2 */
					/* typedef __u32 */ unsigned int rsvd1[5];               /*    36    20 */
					/* typedef __le64 -> __u64 */ unsigned long long prp1;   /*    56     8 */
					/* --- cacheline 1 boundary (64 bytes) --- */
					/* typedef __u64 */ unsigned long long rsvd8;            /*    64     8 */
					/* typedef __le16 -> __u16 */ unsigned short cqid;       /*    72     2 */
					/* typedef __le16 -> __u16 */ unsigned short qsize;      /*    74     2 */
					/* typedef __le16 -> __u16 */ unsigned short cq_flags;   /*    76     2 */
					/* typedef __le16 -> __u16 */ unsigned short irq_vector; /*    78     2 */
					/* typedef __u32 */ unsigned int rsvd12[4];              /*    80    16 */
				} create_cq; /*    32    64 */
				struct nvme_create_sq {
					/* typedef __u8 */ unsigned char opcode;                 /*    32     1 */
					/* typedef __u8 */ unsigned char flags;                  /*    33     1 */
					/* typedef __u16 */ unsigned short command_id;           /*    34     2 */
					/* typedef __u32 */ unsigned int rsvd1[5];               /*    36    20 */
					/* typedef __le64 -> __u64 */ unsigned long long prp1;   /*    56     8 */
					/* --- cacheline 1 boundary (64 bytes) --- */
					/* typedef __u64 */ unsigned long long rsvd8;            /*    64     8 */
					/* typedef __le16 -> __u16 */ unsigned short sqid;       /*    72     2 */
					/* typedef __le16 -> __u16 */ unsigned short qsize;      /*    74     2 */
					/* typedef __le16 -> __u16 */ unsigned short sq_flags;   /*    76     2 */
					/* typedef __le16 -> __u16 */ unsigned short cqid;       /*    78     2 */
					/* typedef __u32 */ unsigned int rsvd12[4];              /*    80    16 */
				} create_sq; /*    32    64 */
				struct nvme_delete_queue {
					/* typedef __u8 */ unsigned char opcode;                 /*    32     1 */
					/* typedef __u8 */ unsigned char flags;                  /*    33     1 */
					/* typedef __u16 */ unsigned short command_id;           /*    34     2 */
					/* typedef __u32 */ unsigned int rsvd1[9];               /*    36    36 */
					/* --- cacheline 1 boundary (64 bytes) was 8 bytes ago --- */
					/* typedef __le16 -> __u16 */ unsigned short qid;        /*    72     2 */
					/* typedef __u16 */ unsigned short rsvd10;               /*    74     2 */
					/* typedef __u32 */ unsigned int rsvd11[5];              /*    76    20 */
				} delete_queue; /*    32    64 */
				struct nvme_download_firmware {
					/* typedef __u8 */ unsigned char opcode;                 /*    32     1 */
					/* typedef __u8 */ unsigned char flags;                  /*    33     1 */
					/* typedef __u16 */ unsigned short command_id;           /*    34     2 */
					/* typedef __u32 */ unsigned int rsvd1[5];               /*    36    20 */
					union nvme_data_ptr {
						struct {
							/* typedef __le64 -> __u64 */ unsigned long long prp1; /*    56     8 */
							/* --- cacheline 1 boundary (64 bytes) --- */
							/* typedef __le64 -> __u64 */ unsigned long long prp2; /*    64     8 */
						};                                               /*    56    16 */
						struct nvme_sgl_desc {
							/* typedef __le64 -> __u64 */ unsigned long long addr; /*    56     8 */
							/* --- cacheline 1 boundary (64 bytes) --- */
							/* typedef __le32 -> __u32 */ unsigned int   length; /*    64     4 */
							/* typedef __u8 */ unsigned char  rsvd[3]; /*    68     3 */
							/* typedef __u8 */ unsigned char  type;  /*    71     1 */
						} sgl; /*    56    16 */
						struct nvme_keyed_sgl_desc {
							/* typedef __le64 -> __u64 */ unsigned long long addr; /*    56     8 */
							/* --- cacheline 1 boundary (64 bytes) --- */
							/* typedef __u8 */ unsigned char  length[3]; /*    64     3 */
							/* typedef __u8 */ unsigned char  key[4]; /*    67     4 */
							/* typedef __u8 */ unsigned char  type;  /*    71     1 */
						} ksgl; /*    56    16 */
					} dptr; /*    56    16 */
					/* --- cacheline 1 boundary (64 bytes) was 8 bytes ago --- */
					/* typedef __le32 -> __u32 */ unsigned int numd;         /*    72     4 */
					/* typedef __le32 -> __u32 */ unsigned int offset;       /*    76     4 */
					/* typedef __u32 */ unsigned int rsvd12[4];              /*    80    16 */
				} dlfw; /*    32    64 */
				struct nvme_format_cmd {
					/* typedef __u8 */ unsigned char opcode;                 /*    32     1 */
					/* typedef __u8 */ unsigned char flags;                  /*    33     1 */
					/* typedef __u16 */ unsigned short command_id;           /*    34     2 */
					/* typedef __le32 -> __u32 */ unsigned int nsid;         /*    36     4 */
					/* typedef __u64 */ unsigned long long rsvd2[4];         /*    40    32 */
					/* --- cacheline 1 boundary (64 bytes) was 8 bytes ago --- */
					/* typedef __le32 -> __u32 */ unsigned int cdw10;        /*    72     4 */
					/* typedef __u32 */ unsigned int rsvd11[5];              /*    76    20 */
				} format; /*    32    64 */
				struct nvme_dsm_cmd {
					/* typedef __u8 */ unsigned char opcode;                 /*    32     1 */
					/* typedef __u8 */ unsigned char flags;                  /*    33     1 */
					/* typedef __u16 */ unsigned short command_id;           /*    34     2 */
					/* typedef __le32 -> __u32 */ unsigned int nsid;         /*    36     4 */
					/* typedef __u64 */ unsigned long long rsvd2[2];         /*    40    16 */
					union nvme_data_ptr {
						struct {
							/* typedef __le64 -> __u64 */ unsigned long long prp1; /*    56     8 */
							/* --- cacheline 1 boundary (64 bytes) --- */
							/* typedef __le64 -> __u64 */ unsigned long long prp2; /*    64     8 */
						};                                               /*    56    16 */
						struct nvme_sgl_desc {
							/* typedef __le64 -> __u64 */ unsigned long long addr; /*    56     8 */
							/* --- cacheline 1 boundary (64 bytes) --- */
							/* typedef __le32 -> __u32 */ unsigned int   length; /*    64     4 */
							/* typedef __u8 */ unsigned char  rsvd[3]; /*    68     3 */
							/* typedef __u8 */ unsigned char  type;  /*    71     1 */
						} sgl; /*    56    16 */
						struct nvme_keyed_sgl_desc {
							/* typedef __le64 -> __u64 */ unsigned long long addr; /*    56     8 */
							/* --- cacheline 1 boundary (64 bytes) --- */
							/* typedef __u8 */ unsigned char  length[3]; /*    64     3 */
							/* typedef __u8 */ unsigned char  key[4]; /*    67     4 */
							/* typedef __u8 */ unsigned char  type;  /*    71     1 */
						} ksgl; /*    56    16 */
					} dptr; /*    56    16 */
					/* --- cacheline 1 boundary (64 bytes) was 8 bytes ago --- */
					/* typedef __le32 -> __u32 */ unsigned int nr;           /*    72     4 */
					/* typedef __le32 -> __u32 */ unsigned int attributes;   /*    76     4 */
					/* typedef __u32 */ unsigned int rsvd12[4];              /*    80    16 */
				} dsm; /*    32    64 */
				struct nvme_write_zeroes_cmd {
					/* typedef __u8 */ unsigned char opcode;                 /*    32     1 */
					/* typedef __u8 */ unsigned char flags;                  /*    33     1 */
					/* typedef __u16 */ unsigned short command_id;           /*    34     2 */
					/* typedef __le32 -> __u32 */ unsigned int nsid;         /*    36     4 */
					/* typedef __u64 */ unsigned long long rsvd2;            /*    40     8 */
					/* typedef __le64 -> __u64 */ unsigned long long metadata; /*    48     8 */
					union nvme_data_ptr {
						struct {
							/* typedef __le64 -> __u64 */ unsigned long long prp1; /*    56     8 */
							/* --- cacheline 1 boundary (64 bytes) --- */
							/* typedef __le64 -> __u64 */ unsigned long long prp2; /*    64     8 */
						};                                               /*    56    16 */
						struct nvme_sgl_desc {
							/* typedef __le64 -> __u64 */ unsigned long long addr; /*    56     8 */
							/* --- cacheline 1 boundary (64 bytes) --- */
							/* typedef __le32 -> __u32 */ unsigned int   length; /*    64     4 */
							/* typedef __u8 */ unsigned char  rsvd[3]; /*    68     3 */
							/* typedef __u8 */ unsigned char  type;  /*    71     1 */
						} sgl; /*    56    16 */
						struct nvme_keyed_sgl_desc {
							/* typedef __le64 -> __u64 */ unsigned long long addr; /*    56     8 */
							/* --- cacheline 1 boundary (64 bytes) --- */
							/* typedef __u8 */ unsigned char  length[3]; /*    64     3 */
							/* typedef __u8 */ unsigned char  key[4]; /*    67     4 */
							/* typedef __u8 */ unsigned char  type;  /*    71     1 */
						} ksgl; /*    56    16 */
					} dptr; /*    56    16 */
					/* --- cacheline 1 boundary (64 bytes) was 8 bytes ago --- */
					/* typedef __le64 -> __u64 */ unsigned long long slba;   /*    72     8 */
					/* typedef __le16 -> __u16 */ unsigned short length;     /*    80     2 */
					/* typedef __le16 -> __u16 */ unsigned short control;    /*    82     2 */
					/* typedef __le32 -> __u32 */ unsigned int dsmgmt;       /*    84     4 */
					/* typedef __le32 -> __u32 */ unsigned int reftag;       /*    88     4 */
					/* typedef __le16 -> __u16 */ unsigned short apptag;     /*    92     2 */
					/* typedef __le16 -> __u16 */ unsigned short appmask;    /*    94     2 */
				} write_zeroes; /*    32    64 */
				struct nvme_zone_mgmt_send_cmd {
					/* typedef __u8 */ unsigned char opcode;                 /*    32     1 */
					/* typedef __u8 */ unsigned char flags;                  /*    33     1 */
					/* typedef __u16 */ unsigned short command_id;           /*    34     2 */
					/* typedef __le32 -> __u32 */ unsigned int nsid;         /*    36     4 */
					/* typedef __le32 -> __u32 */ unsigned int cdw2[2];      /*    40     8 */
					/* typedef __le64 -> __u64 */ unsigned long long metadata; /*    48     8 */
					union nvme_data_ptr {
						struct {
							/* typedef __le64 -> __u64 */ unsigned long long prp1; /*    56     8 */
							/* --- cacheline 1 boundary (64 bytes) --- */
							/* typedef __le64 -> __u64 */ unsigned long long prp2; /*    64     8 */
						};                                               /*    56    16 */
						struct nvme_sgl_desc {
							/* typedef __le64 -> __u64 */ unsigned long long addr; /*    56     8 */
							/* --- cacheline 1 boundary (64 bytes) --- */
							/* typedef __le32 -> __u32 */ unsigned int   length; /*    64     4 */
							/* typedef __u8 */ unsigned char  rsvd[3]; /*    68     3 */
							/* typedef __u8 */ unsigned char  type;  /*    71     1 */
						} sgl; /*    56    16 */
						struct nvme_keyed_sgl_desc {
							/* typedef __le64 -> __u64 */ unsigned long long addr; /*    56     8 */
							/* --- cacheline 1 boundary (64 bytes) --- */
							/* typedef __u8 */ unsigned char  length[3]; /*    64     3 */
							/* typedef __u8 */ unsigned char  key[4]; /*    67     4 */
							/* typedef __u8 */ unsigned char  type;  /*    71     1 */
						} ksgl; /*    56    16 */
					} dptr; /*    56    16 */
					/* --- cacheline 1 boundary (64 bytes) was 8 bytes ago --- */
					/* typedef __le64 -> __u64 */ unsigned long long slba;   /*    72     8 */
					/* typedef __le32 -> __u32 */ unsigned int cdw12;        /*    80     4 */
					/* typedef __u8 */ unsigned char zsa;                    /*    84     1 */
					/* typedef __u8 */ unsigned char select_all;             /*    85     1 */
					/* typedef __u8 */ unsigned char rsvd13[2];              /*    86     2 */
					/* typedef __le32 -> __u32 */ unsigned int cdw14[2];     /*    88     8 */
				} zms; /*    32    64 */
				struct nvme_zone_mgmt_recv_cmd {
					/* typedef __u8 */ unsigned char opcode;                 /*    32     1 */
					/* typedef __u8 */ unsigned char flags;                  /*    33     1 */
					/* typedef __u16 */ unsigned short command_id;           /*    34     2 */
					/* typedef __le32 -> __u32 */ unsigned int nsid;         /*    36     4 */
					/* typedef __le64 -> __u64 */ unsigned long long rsvd2[2]; /*    40    16 */
					union nvme_data_ptr {
						struct {
							/* typedef __le64 -> __u64 */ unsigned long long prp1; /*    56     8 */
							/* --- cacheline 1 boundary (64 bytes) --- */
							/* typedef __le64 -> __u64 */ unsigned long long prp2; /*    64     8 */
						};                                               /*    56    16 */
						struct nvme_sgl_desc {
							/* typedef __le64 -> __u64 */ unsigned long long addr; /*    56     8 */
							/* --- cacheline 1 boundary (64 bytes) --- */
							/* typedef __le32 -> __u32 */ unsigned int   length; /*    64     4 */
							/* typedef __u8 */ unsigned char  rsvd[3]; /*    68     3 */
							/* typedef __u8 */ unsigned char  type;  /*    71     1 */
						} sgl; /*    56    16 */
						struct nvme_keyed_sgl_desc {
							/* typedef __le64 -> __u64 */ unsigned long long addr; /*    56     8 */
							/* --- cacheline 1 boundary (64 bytes) --- */
							/* typedef __u8 */ unsigned char  length[3]; /*    64     3 */
							/* typedef __u8 */ unsigned char  key[4]; /*    67     4 */
							/* typedef __u8 */ unsigned char  type;  /*    71     1 */
						} ksgl; /*    56    16 */
					} dptr; /*    56    16 */
					/* --- cacheline 1 boundary (64 bytes) was 8 bytes ago --- */
					/* typedef __le64 -> __u64 */ unsigned long long slba;   /*    72     8 */
					/* typedef __le32 -> __u32 */ unsigned int numd;         /*    80     4 */
					/* typedef __u8 */ unsigned char zra;                    /*    84     1 */
					/* typedef __u8 */ unsigned char zrasf;                  /*    85     1 */
					/* typedef __u8 */ unsigned char pr;                     /*    86     1 */
					/* typedef __u8 */ unsigned char rsvd13;                 /*    87     1 */
					/* typedef __le32 -> __u32 */ unsigned int cdw14[2];     /*    88     8 */
				} zmr; /*    32    64 */
				struct nvme_abort_cmd {
					/* typedef __u8 */ unsigned char opcode;                 /*    32     1 */
					/* typedef __u8 */ unsigned char flags;                  /*    33     1 */
					/* typedef __u16 */ unsigned short command_id;           /*    34     2 */
					/* typedef __u32 */ unsigned int rsvd1[9];               /*    36    36 */
					/* --- cacheline 1 boundary (64 bytes) was 8 bytes ago --- */
					/* typedef __le16 -> __u16 */ unsigned short sqid;       /*    72     2 */
					/* typedef __u16 */ unsigned short cid;                  /*    74     2 */
					/* typedef __u32 */ unsigned int rsvd11[5];              /*    76    20 */
				} abort; /*    32    64 */
				struct nvme_get_log_page_command {
					/* typedef __u8 */ unsigned char opcode;                 /*    32     1 */
					/* typedef __u8 */ unsigned char flags;                  /*    33     1 */
					/* typedef __u16 */ unsigned short command_id;           /*    34     2 */
					/* typedef __le32 -> __u32 */ unsigned int nsid;         /*    36     4 */
					/* typedef __u64 */ unsigned long long rsvd2[2];         /*    40    16 */
					union nvme_data_ptr {
						struct {
							/* typedef __le64 -> __u64 */ unsigned long long prp1; /*    56     8 */
							/* --- cacheline 1 boundary (64 bytes) --- */
							/* typedef __le64 -> __u64 */ unsigned long long prp2; /*    64     8 */
						};                                               /*    56    16 */
						struct nvme_sgl_desc {
							/* typedef __le64 -> __u64 */ unsigned long long addr; /*    56     8 */
							/* --- cacheline 1 boundary (64 bytes) --- */
							/* typedef __le32 -> __u32 */ unsigned int   length; /*    64     4 */
							/* typedef __u8 */ unsigned char  rsvd[3]; /*    68     3 */
							/* typedef __u8 */ unsigned char  type;  /*    71     1 */
						} sgl; /*    56    16 */
						struct nvme_keyed_sgl_desc {
							/* typedef __le64 -> __u64 */ unsigned long long addr; /*    56     8 */
							/* --- cacheline 1 boundary (64 bytes) --- */
							/* typedef __u8 */ unsigned char  length[3]; /*    64     3 */
							/* typedef __u8 */ unsigned char  key[4]; /*    67     4 */
							/* typedef __u8 */ unsigned char  type;  /*    71     1 */
						} ksgl; /*    56    16 */
					} dptr; /*    56    16 */
					/* --- cacheline 1 boundary (64 bytes) was 8 bytes ago --- */
					/* typedef __u8 */ unsigned char lid;                    /*    72     1 */
					/* typedef __u8 */ unsigned char lsp;                    /*    73     1 */
					/* typedef __le16 -> __u16 */ unsigned short numdl;      /*    74     2 */
					/* typedef __le16 -> __u16 */ unsigned short numdu;      /*    76     2 */
					/* typedef __u16 */ unsigned short rsvd11;               /*    78     2 */
					union {
						struct {
							/* typedef __le32 -> __u32 */ unsigned int   lpol; /*    80     4 */
							/* typedef __le32 -> __u32 */ unsigned int   lpou; /*    84     4 */
						};                                               /*    80     8 */
						/* typedef __le64 -> __u64 */ unsigned long long lpo; /*    80     8 */
					};                                                       /*    80     8 */
					union {
						struct {
							/* typedef __le32 -> __u32 */ unsigned int lpol; /*    32     4 */
							/* typedef __le32 -> __u32 */ unsigned int lpou; /*    36     4 */
						};                                                       /*    32     8 */
						/* typedef __le64 -> __u64 */ unsigned long long lpo;    /*    32     8 */
					};

					/* typedef __u8 */ unsigned char rsvd14[3];              /*    88     3 */
					/* typedef __u8 */ unsigned char csi;                    /*    91     1 */
					/* typedef __u32 */ unsigned int rsvd15;                 /*    92     4 */
				} get_log_page; /*    32    64 */
				struct nvmf_common_command {
					/* typedef __u8 */ unsigned char opcode;                 /*    32     1 */
					/* typedef __u8 */ unsigned char resv1;                  /*    33     1 */
					/* typedef __u16 */ unsigned short command_id;           /*    34     2 */
					/* typedef __u8 */ unsigned char fctype;                 /*    36     1 */
					/* typedef __u8 */ unsigned char resv2[35];              /*    37    35 */
					/* --- cacheline 1 boundary (64 bytes) was 8 bytes ago --- */
					/* typedef __u8 */ unsigned char ts[24];                 /*    72    24 */
				} fabrics; /*    32    64 */
				struct nvmf_connect_command {
					/* typedef __u8 */ unsigned char opcode;                 /*    32     1 */
					/* typedef __u8 */ unsigned char resv1;                  /*    33     1 */
					/* typedef __u16 */ unsigned short command_id;           /*    34     2 */
					/* typedef __u8 */ unsigned char fctype;                 /*    36     1 */
					/* typedef __u8 */ unsigned char resv2[19];              /*    37    19 */
					union nvme_data_ptr {
						struct {
							/* typedef __le64 -> __u64 */ unsigned long long prp1; /*    56     8 */
							/* --- cacheline 1 boundary (64 bytes) --- */
							/* typedef __le64 -> __u64 */ unsigned long long prp2; /*    64     8 */
						};                                               /*    56    16 */
						struct nvme_sgl_desc {
							/* typedef __le64 -> __u64 */ unsigned long long addr; /*    56     8 */
							/* --- cacheline 1 boundary (64 bytes) --- */
							/* typedef __le32 -> __u32 */ unsigned int   length; /*    64     4 */
							/* typedef __u8 */ unsigned char  rsvd[3]; /*    68     3 */
							/* typedef __u8 */ unsigned char  type;  /*    71     1 */
						} sgl; /*    56    16 */
						struct nvme_keyed_sgl_desc {
							/* typedef __le64 -> __u64 */ unsigned long long addr; /*    56     8 */
							/* --- cacheline 1 boundary (64 bytes) --- */
							/* typedef __u8 */ unsigned char  length[3]; /*    64     3 */
							/* typedef __u8 */ unsigned char  key[4]; /*    67     4 */
							/* typedef __u8 */ unsigned char  type;  /*    71     1 */
						} ksgl; /*    56    16 */
					} dptr; /*    56    16 */
					/* --- cacheline 1 boundary (64 bytes) was 8 bytes ago --- */
					/* typedef __le16 -> __u16 */ unsigned short recfmt;     /*    72     2 */
					/* typedef __le16 -> __u16 */ unsigned short qid;        /*    74     2 */
					/* typedef __le16 -> __u16 */ unsigned short sqsize;     /*    76     2 */
					/* typedef __u8 */ unsigned char cattr;                  /*    78     1 */
					/* typedef __u8 */ unsigned char resv3;                  /*    79     1 */
					/* typedef __le32 -> __u32 */ unsigned int kato;         /*    80     4 */
					/* typedef __u8 */ unsigned char resv4[12];              /*    84    12 */
				} connect; /*    32    64 */
				struct nvmf_property_set_command {
					/* typedef __u8 */ unsigned char opcode;                 /*    32     1 */
					/* typedef __u8 */ unsigned char resv1;                  /*    33     1 */
					/* typedef __u16 */ unsigned short command_id;           /*    34     2 */
					/* typedef __u8 */ unsigned char fctype;                 /*    36     1 */
					/* typedef __u8 */ unsigned char resv2[35];              /*    37    35 */
					/* --- cacheline 1 boundary (64 bytes) was 8 bytes ago --- */
					/* typedef __u8 */ unsigned char attrib;                 /*    72     1 */
					/* typedef __u8 */ unsigned char resv3[3];               /*    73     3 */
					/* typedef __le32 -> __u32 */ unsigned int offset;       /*    76     4 */
					/* typedef __le64 -> __u64 */ unsigned long long value;  /*    80     8 */
					/* typedef __u8 */ unsigned char resv4[8];               /*    88     8 */
				} prop_set; /*    32    64 */
				struct nvmf_property_get_command {
					/* typedef __u8 */ unsigned char opcode;                 /*    32     1 */
					/* typedef __u8 */ unsigned char resv1;                  /*    33     1 */
					/* typedef __u16 */ unsigned short command_id;           /*    34     2 */
					/* typedef __u8 */ unsigned char fctype;                 /*    36     1 */
					/* typedef __u8 */ unsigned char resv2[35];              /*    37    35 */
					/* --- cacheline 1 boundary (64 bytes) was 8 bytes ago --- */
					/* typedef __u8 */ unsigned char attrib;                 /*    72     1 */
					/* typedef __u8 */ unsigned char resv3[3];               /*    73     3 */
					/* typedef __le32 -> __u32 */ unsigned int offset;       /*    76     4 */
					/* typedef __u8 */ unsigned char resv4[16];              /*    80    16 */
				} prop_get; /*    32    64 */
				struct nvmf_auth_common_command {
					/* typedef __u8 */ unsigned char opcode;                 /*    32     1 */
					/* typedef __u8 */ unsigned char resv1;                  /*    33     1 */
					/* typedef __u16 */ unsigned short command_id;           /*    34     2 */
					/* typedef __u8 */ unsigned char fctype;                 /*    36     1 */
					/* typedef __u8 */ unsigned char resv2[19];              /*    37    19 */
					union nvme_data_ptr {
						struct {
							/* typedef __le64 -> __u64 */ unsigned long long prp1; /*    56     8 */
							/* --- cacheline 1 boundary (64 bytes) --- */
							/* typedef __le64 -> __u64 */ unsigned long long prp2; /*    64     8 */
						};                                               /*    56    16 */
						struct nvme_sgl_desc {
							/* typedef __le64 -> __u64 */ unsigned long long addr; /*    56     8 */
							/* --- cacheline 1 boundary (64 bytes) --- */
							/* typedef __le32 -> __u32 */ unsigned int   length; /*    64     4 */
							/* typedef __u8 */ unsigned char  rsvd[3]; /*    68     3 */
							/* typedef __u8 */ unsigned char  type;  /*    71     1 */
						} sgl; /*    56    16 */
						struct nvme_keyed_sgl_desc {
							/* typedef __le64 -> __u64 */ unsigned long long addr; /*    56     8 */
							/* --- cacheline 1 boundary (64 bytes) --- */
							/* typedef __u8 */ unsigned char  length[3]; /*    64     3 */
							/* typedef __u8 */ unsigned char  key[4]; /*    67     4 */
							/* typedef __u8 */ unsigned char  type;  /*    71     1 */
						} ksgl; /*    56    16 */
					} dptr; /*    56    16 */
					/* --- cacheline 1 boundary (64 bytes) was 8 bytes ago --- */
					/* typedef __u8 */ unsigned char resv3;                  /*    72     1 */
					/* typedef __u8 */ unsigned char spsp0;                  /*    73     1 */
					/* typedef __u8 */ unsigned char spsp1;                  /*    74     1 */
					/* typedef __u8 */ unsigned char secp;                   /*    75     1 */
					/* typedef __le32 -> __u32 */ unsigned int al_tl;        /*    76     4 */
					/* typedef __u8 */ unsigned char resv4[16];              /*    80    16 */
				} auth_common; /*    32    64 */
				struct nvmf_auth_send_command {
					/* typedef __u8 */ unsigned char opcode;                 /*    32     1 */
					/* typedef __u8 */ unsigned char resv1;                  /*    33     1 */
					/* typedef __u16 */ unsigned short command_id;           /*    34     2 */
					/* typedef __u8 */ unsigned char fctype;                 /*    36     1 */
					/* typedef __u8 */ unsigned char resv2[19];              /*    37    19 */
					union nvme_data_ptr {
						struct {
							/* typedef __le64 -> __u64 */ unsigned long long prp1; /*    56     8 */
							/* --- cacheline 1 boundary (64 bytes) --- */
							/* typedef __le64 -> __u64 */ unsigned long long prp2; /*    64     8 */
						};                                               /*    56    16 */
						struct nvme_sgl_desc {
							/* typedef __le64 -> __u64 */ unsigned long long addr; /*    56     8 */
							/* --- cacheline 1 boundary (64 bytes) --- */
							/* typedef __le32 -> __u32 */ unsigned int   length; /*    64     4 */
							/* typedef __u8 */ unsigned char  rsvd[3]; /*    68     3 */
							/* typedef __u8 */ unsigned char  type;  /*    71     1 */
						} sgl; /*    56    16 */
						struct nvme_keyed_sgl_desc {
							/* typedef __le64 -> __u64 */ unsigned long long addr; /*    56     8 */
							/* --- cacheline 1 boundary (64 bytes) --- */
							/* typedef __u8 */ unsigned char  length[3]; /*    64     3 */
							/* typedef __u8 */ unsigned char  key[4]; /*    67     4 */
							/* typedef __u8 */ unsigned char  type;  /*    71     1 */
						} ksgl; /*    56    16 */
					} dptr; /*    56    16 */
					/* --- cacheline 1 boundary (64 bytes) was 8 bytes ago --- */
					/* typedef __u8 */ unsigned char resv3;                  /*    72     1 */
					/* typedef __u8 */ unsigned char spsp0;                  /*    73     1 */
					/* typedef __u8 */ unsigned char spsp1;                  /*    74     1 */
					/* typedef __u8 */ unsigned char secp;                   /*    75     1 */
					/* typedef __le32 -> __u32 */ unsigned int tl;           /*    76     4 */
					/* typedef __u8 */ unsigned char resv4[16];              /*    80    16 */
				} auth_send; /*    32    64 */
				struct nvmf_auth_receive_command {
					/* typedef __u8 */ unsigned char opcode;                 /*    32     1 */
					/* typedef __u8 */ unsigned char resv1;                  /*    33     1 */
					/* typedef __u16 */ unsigned short command_id;           /*    34     2 */
					/* typedef __u8 */ unsigned char fctype;                 /*    36     1 */
					/* typedef __u8 */ unsigned char resv2[19];              /*    37    19 */
					union nvme_data_ptr {
						struct {
							/* typedef __le64 -> __u64 */ unsigned long long prp1; /*    56     8 */
							/* --- cacheline 1 boundary (64 bytes) --- */
							/* typedef __le64 -> __u64 */ unsigned long long prp2; /*    64     8 */
						};                                               /*    56    16 */
						struct nvme_sgl_desc {
							/* typedef __le64 -> __u64 */ unsigned long long addr; /*    56     8 */
							/* --- cacheline 1 boundary (64 bytes) --- */
							/* typedef __le32 -> __u32 */ unsigned int   length; /*    64     4 */
							/* typedef __u8 */ unsigned char  rsvd[3]; /*    68     3 */
							/* typedef __u8 */ unsigned char  type;  /*    71     1 */
						} sgl; /*    56    16 */
						struct nvme_keyed_sgl_desc {
							/* typedef __le64 -> __u64 */ unsigned long long addr; /*    56     8 */
							/* --- cacheline 1 boundary (64 bytes) --- */
							/* typedef __u8 */ unsigned char  length[3]; /*    64     3 */
							/* typedef __u8 */ unsigned char  key[4]; /*    67     4 */
							/* typedef __u8 */ unsigned char  type;  /*    71     1 */
						} ksgl; /*    56    16 */
					} dptr; /*    56    16 */
					/* --- cacheline 1 boundary (64 bytes) was 8 bytes ago --- */
					/* typedef __u8 */ unsigned char resv3;                  /*    72     1 */
					/* typedef __u8 */ unsigned char spsp0;                  /*    73     1 */
					/* typedef __u8 */ unsigned char spsp1;                  /*    74     1 */
					/* typedef __u8 */ unsigned char secp;                   /*    75     1 */
					/* typedef __le32 -> __u32 */ unsigned int al;           /*    76     4 */
					/* typedef __u8 */ unsigned char resv4[16];              /*    80    16 */
				} auth_receive; /*    32    64 */
				struct nvme_dbbuf {
					/* typedef __u8 */ unsigned char opcode;                 /*    32     1 */
					/* typedef __u8 */ unsigned char flags;                  /*    33     1 */
					/* typedef __u16 */ unsigned short command_id;           /*    34     2 */
					/* typedef __u32 */ unsigned int rsvd1[5];               /*    36    20 */
					/* typedef __le64 -> __u64 */ unsigned long long prp1;   /*    56     8 */
					/* --- cacheline 1 boundary (64 bytes) --- */
					/* typedef __le64 -> __u64 */ unsigned long long prp2;   /*    64     8 */
					/* typedef __u32 */ unsigned int rsvd12[6];              /*    72    24 */
				} dbbuf; /*    32    64 */
				struct nvme_directive_cmd {
					/* typedef __u8 */ unsigned char opcode;                 /*    32     1 */
					/* typedef __u8 */ unsigned char flags;                  /*    33     1 */
					/* typedef __u16 */ unsigned short command_id;           /*    34     2 */
					/* typedef __le32 -> __u32 */ unsigned int nsid;         /*    36     4 */
					/* typedef __u64 */ unsigned long long rsvd2[2];         /*    40    16 */
					union nvme_data_ptr {
						struct {
							/* typedef __le64 -> __u64 */ unsigned long long prp1; /*    56     8 */
							/* --- cacheline 1 boundary (64 bytes) --- */
							/* typedef __le64 -> __u64 */ unsigned long long prp2; /*    64     8 */
						};                                               /*    56    16 */
						struct nvme_sgl_desc {
							/* typedef __le64 -> __u64 */ unsigned long long addr; /*    56     8 */
							/* --- cacheline 1 boundary (64 bytes) --- */
							/* typedef __le32 -> __u32 */ unsigned int   length; /*    64     4 */
							/* typedef __u8 */ unsigned char  rsvd[3]; /*    68     3 */
							/* typedef __u8 */ unsigned char  type;  /*    71     1 */
						} sgl; /*    56    16 */
						struct nvme_keyed_sgl_desc {
							/* typedef __le64 -> __u64 */ unsigned long long addr; /*    56     8 */
							/* --- cacheline 1 boundary (64 bytes) --- */
							/* typedef __u8 */ unsigned char  length[3]; /*    64     3 */
							/* typedef __u8 */ unsigned char  key[4]; /*    67     4 */
							/* typedef __u8 */ unsigned char  type;  /*    71     1 */
						} ksgl; /*    56    16 */
					} dptr; /*    56    16 */
					/* --- cacheline 1 boundary (64 bytes) was 8 bytes ago --- */
					/* typedef __le32 -> __u32 */ unsigned int numd;         /*    72     4 */
					/* typedef __u8 */ unsigned char doper;                  /*    76     1 */
					/* typedef __u8 */ unsigned char dtype;                  /*    77     1 */
					/* typedef __le16 -> __u16 */ unsigned short dspec;      /*    78     2 */
					/* typedef __u8 */ unsigned char endir;                  /*    80     1 */
					/* typedef __u8 */ unsigned char tdtype;                 /*    81     1 */
					/* typedef __u16 */ unsigned short rsvd15;               /*    82     2 */
					/* typedef __u32 */ unsigned int rsvd16[3];              /*    84    12 */
				} directive; /*    32    64 */
			};

		} sqe; /*    32    64 */
		/* --- cacheline 1 boundary (64 bytes) was 32 bytes ago --- */
		/* typedef __u8 */ unsigned char      dps;                               /*    96     1 */
		/* typedef __u8 */ unsigned char      lbads;                             /*    97     1 */
		/* typedef __be16 -> __u16 */ unsigned short     ms;                     /*    98     2 */
		/* typedef __be32 -> __u32 */ unsigned int       rsvd92;                 /*   100     4 */
	} cmdiubuf; /*     8    96 */
	struct nvme_fc_ersp_iu {
		/* typedef __u8 */ unsigned char      ersp_result;                       /*   104     1 */
		/* typedef __u8 */ unsigned char      rsvd1;                             /*   105     1 */
		/* typedef __be16 -> __u16 */ unsigned short     iu_len;                 /*   106     2 */
		/* typedef __be32 -> __u32 */ unsigned int       rsn;                    /*   108     4 */
		/* typedef __be32 -> __u32 */ unsigned int       xfrd_len;               /*   112     4 */
		/* typedef __be32 -> __u32 */ unsigned int       rsvd12;                 /*   116     4 */
		struct nvme_completion {
			union nvme_result {
				/* typedef __le16 -> __u16 */ unsigned short u16;        /*   120     2 */
				/* typedef __le32 -> __u32 */ unsigned int u32;          /*   120     4 */
				/* typedef __le64 -> __u64 */ unsigned long long u64;    /*   120     8 */
			} result; /*   120     8 */
			/* --- cacheline 2 boundary (128 bytes) --- */
			/* typedef __le16 -> __u16 */ unsigned short sq_head;            /*   128     2 */
			/* typedef __le16 -> __u16 */ unsigned short sq_id;              /*   130     2 */
			/* typedef __u16 */ unsigned short command_id;                   /*   132     2 */
			/* typedef __le16 -> __u16 */ unsigned short status;             /*   134     2 */
		} cqe; /*   120    16 */
	} rspiubuf; /*   104    32 */
	/* typedef dma_addr_t -> u64 -> __u64 */ unsigned long long         rspdma;      /*   136     8 */
	struct scatterlist *       next_sg;                                              /*   144     8 */
	struct scatterlist *       data_sg;                                              /*   152     8 */
	int                        data_sg_cnt;                                          /*   160     4 */
	/* typedef u32 -> __u32 */ unsigned int               offset;                    /*   164     4 */
	enum nvmet_fcp_datadir {
		NVMET_FCP_NODATA  = 0,
		NVMET_FCP_WRITE   = 1,
		NVMET_FCP_READ    = 2,
		NVMET_FCP_ABORTED = 3,
	} io_dir; /*   168     4 */
	/* typedef bool */ _Bool                      active;                            /*   172     1 */
	/* typedef bool */ _Bool                      abort;                             /*   173     1 */
	/* typedef bool */ _Bool                      aborted;                           /*   174     1 */
	/* typedef bool */ _Bool                      writedataactive;                   /*   175     1 */
	/* typedef spinlock_t */ struct spinlock {
		union {
			struct raw_spinlock {
				/* typedef arch_spinlock_t */ struct qspinlock {
					union {
						/* typedef atomic_t */ struct {
							int                    counter;  /*   176     4 */
						} val; /*   176     4 */
						struct {
							/* typedef u8 -> __u8 */ unsigned char          locked; /*   176     1 */
							/* typedef u8 -> __u8 */ unsigned char          pending; /*   177     1 */
						};                                       /*   176     2 */
						struct {
							/* typedef u16 -> __u16 */ unsigned short         locked_pending; /*   176     2 */
							/* typedef u16 -> __u16 */ unsigned short         tail; /*   178     2 */
						};                                       /*   176     4 */
					};                                               /*   176     4 */
					union {
						/* typedef atomic_t */ struct {
							int            counter;                  /*   176     4 */
						} val; /*   176     4 */
						struct {
							/* typedef u8 -> __u8 */ unsigned char  locked; /*   176     1 */
							/* typedef u8 -> __u8 */ unsigned char  pending; /*   177     1 */
						};                                               /*   176     2 */
						struct {
							/* typedef u16 -> __u16 */ unsigned short locked_pending; /*   176     2 */
							/* typedef u16 -> __u16 */ unsigned short tail; /*   178     2 */
						};                                               /*   176     4 */
					} raw_lock;

				} raw_lock; /*   176     4 */
			} rlock; /*   176     4 */
		};                                                                       /*   176     4 */
		union {
			struct raw_spinlock {
				/* typedef arch_spinlock_t */ struct qspinlock {
					union {
						/* typedef atomic_t */ struct {
							int            counter;                  /*   176     4 */
						} val; /*   176     4 */
						struct {
							/* typedef u8 -> __u8 */ unsigned char  locked; /*   176     1 */
							/* typedef u8 -> __u8 */ unsigned char  pending; /*   177     1 */
						};                                               /*   176     2 */
						struct {
							/* typedef u16 -> __u16 */ unsigned short locked_pending; /*   176     2 */
							/* typedef u16 -> __u16 */ unsigned short tail; /*   178     2 */
						};                                               /*   176     4 */
					};                                                       /*   176     4 */
					union {
						/* typedef atomic_t */ struct {
							int    counter;                                  /*   176     4 */
						} val; /*   176     4 */
						struct {
							/* typedef u8 -> __u8 */ unsigned char locked;   /*   176     1 */
							/* typedef u8 -> __u8 */ unsigned char pending;  /*   177     1 */
						};                                                       /*   176     2 */
						struct {
							/* typedef u16 -> __u16 */ unsigned short locked_pending; /*   176     2 */
							/* typedef u16 -> __u16 */ unsigned short tail;  /*   178     2 */
						};                                                       /*   176     4 */
					} raw_lock;

				} raw_lock; /*   176     4 */
			} rlock; /*   176     4 */
		} flock;

	} flock; /*   176     4 */

	/* XXX 4 bytes hole, try to pack */

	struct nvmet_req {
		struct nvme_command * cmd;                                               /*   184     8 */
		/* --- cacheline 3 boundary (192 bytes) --- */
		struct nvme_completion * cqe;                                            /*   192     8 */
		struct nvmet_sq *  sq;                                                   /*   200     8 */
		struct nvmet_cq *  cq;                                                   /*   208     8 */
		struct nvmet_ns *  ns;                                                   /*   216     8 */
		struct scatterlist * sg;                                                 /*   224     8 */
		struct scatterlist * metadata_sg;                                        /*   232     8 */
		struct bio_vec {
			struct page * bv_page;                                           /*   240     8 */
			unsigned int bv_len;                                             /*   248     4 */
			unsigned int bv_offset;                                          /*   252     4 */
		} inline_bvec[8]; /*   240   128 */
		/* --- cacheline 5 boundary (320 bytes) was 48 bytes ago --- */
		union {
			struct {
				struct bio {
					struct bio * bi_next;                            /*   368     8 */
					struct block_device * bi_bdev;                   /*   376     8 */
					/* --- cacheline 6 boundary (384 bytes) --- */
					/* typedef blk_opf_t -> __u32 */ unsigned int bi_opf; /*   384     4 */
					unsigned short bi_flags;                         /*   388     2 */
					unsigned short bi_ioprio;                        /*   390     2 */
					enum rw_hint {
						WRITE_LIFE_NOT_SET = 0,
						WRITE_LIFE_NONE    = 1,
						WRITE_LIFE_SHORT   = 2,
						WRITE_LIFE_MEDIUM  = 3,
						WRITE_LIFE_LONG    = 4,
						WRITE_LIFE_EXTREME = 5,
					} __attribute__((__packed__)) bi_write_hint; /*   392     1 */
					/* typedef blk_status_t -> u8 -> __u8 */ unsigned char bi_status; /*   393     1 */

					/* XXX 2 bytes hole, try to pack */

					/* typedef atomic_t */ struct {
						int            counter;                  /*   396     4 */
					} __bi_remaining; /*   396     4 */
					struct bvec_iter {
						/* typedef sector_t -> u64 -> __u64 */ unsigned long long bi_sector; /*   400     8 */
						unsigned int   bi_size;                  /*   408     4 */
						unsigned int   bi_idx;                   /*   412     4 */
						unsigned int   bi_bvec_done;             /*   416     4 */
					} __attribute__((__packed__)) bi_iter __attribute__((__aligned__(4))); /*   400    20 */
					union {
						/* typedef blk_qc_t */ unsigned int   bi_cookie; /*   420     4 */
						unsigned int   __bi_nr_segments;         /*   420     4 */
					};                                               /*   420     4 */
					union {
						/* typedef blk_qc_t */ unsigned int bi_cookie;   /*   368     4 */
						unsigned int __bi_nr_segments;                   /*   368     4 */
					};

					bio_end_io_t * bi_end_io;                        /*   424     8 */
					void * bi_private;                               /*   432     8 */
					struct blkcg_gq * bi_blkg;                       /*   440     8 */
					/* --- cacheline 7 boundary (448 bytes) --- */
					struct bio_issue {
						/* typedef u64 -> __u64 */ unsigned long long value; /*   448     8 */
					} bi_issue; /*   448     8 */
					/* typedef u64 -> __u64 */ unsigned long long bi_iocost_cost; /*   456     8 */
					union {
					};                                               /*   464     0 */
					union {
					};

					unsigned short bi_vcnt;                          /*   464     2 */
					unsigned short bi_max_vecs;                      /*   466     2 */
					/* typedef atomic_t */ struct {
						int            counter;                  /*   468     4 */
					} __bi_cnt; /*   468     4 */
					struct bio_vec * bi_io_vec;                      /*   472     8 */
					struct bio_set * bi_pool;                        /*   480     8 */
					struct bio_vec {
						struct page *  bv_page;                  /*   488     8 */
						unsigned int   bv_len;                   /*   496     4 */
						unsigned int   bv_offset;                /*   500     4 */
					} bi_inline_vecs[0]; /*   488     0 */
				} inline_bio; /*   368   120 */

				/* XXX last struct has 1 hole */
			} b;                                                             /*   368   120 */
			struct {
				/* typedef bool */ _Bool mpool_alloc;                    /*   368     1 */

				/* XXX 7 bytes hole, try to pack */

				struct kiocb {
					struct file * ki_filp;                           /*   376     8 */
					/* --- cacheline 6 boundary (384 bytes) --- */
					/* typedef loff_t -> __kernel_loff_t */ long long ki_pos; /*   384     8 */
					void   (*ki_complete)(struct kiocb *, long);     /*   392     8 */
					void * private;                                  /*   400     8 */
					int    ki_flags;                                 /*   408     4 */
					/* typedef u16 -> __u16 */ unsigned short ki_ioprio; /*   412     2 */

					/* XXX 2 bytes hole, try to pack */

					union {
						struct wait_page_queue * ki_waitq;       /*   416     8 */
						ssize_t        (*dio_complete)(void *);  /*   416     8 */
					};                                               /*   416     8 */
					union {
						struct wait_page_queue * ki_waitq;               /*   376     8 */
						ssize_t (*dio_complete)(void *);                 /*   376     8 */
					};

				} iocb; /*   376    48 */

				/* XXX last struct has 1 hole */

				struct bio_vec * bvec;                                   /*   424     8 */
				struct work_struct {
					/* typedef atomic_long_t -> atomic64_t */ struct {
						/* typedef s64 -> __s64 */ long long      counter; /*   432     8 */
					} data; /*   432     8 */
					struct list_head {
						struct list_head * next;                 /*   440     8 */
						/* --- cacheline 7 boundary (448 bytes) --- */
						struct list_head * prev;                 /*   448     8 */
					} entry; /*   440    16 */
					/* typedef work_func_t */ void   (*func)(struct work_struct *); /*   456     8 */
				} work; /*   432    32 */
			} f;                                                             /*   368    96 */
			struct {
				struct bio {
					struct bio * bi_next;                            /*   368     8 */
					struct block_device * bi_bdev;                   /*   376     8 */
					/* --- cacheline 6 boundary (384 bytes) --- */
					/* typedef blk_opf_t -> __u32 */ unsigned int bi_opf; /*   384     4 */
					unsigned short bi_flags;                         /*   388     2 */
					unsigned short bi_ioprio;                        /*   390     2 */
					enum rw_hint {
						WRITE_LIFE_NOT_SET = 0,
						WRITE_LIFE_NONE    = 1,
						WRITE_LIFE_SHORT   = 2,
						WRITE_LIFE_MEDIUM  = 3,
						WRITE_LIFE_LONG    = 4,
						WRITE_LIFE_EXTREME = 5,
					} __attribute__((__packed__)) bi_write_hint; /*   392     1 */
					/* typedef blk_status_t -> u8 -> __u8 */ unsigned char bi_status; /*   393     1 */

					/* XXX 2 bytes hole, try to pack */

					/* typedef atomic_t */ struct {
						int            counter;                  /*   396     4 */
					} __bi_remaining; /*   396     4 */
					struct bvec_iter {
						/* typedef sector_t -> u64 -> __u64 */ unsigned long long bi_sector; /*   400     8 */
						unsigned int   bi_size;                  /*   408     4 */
						unsigned int   bi_idx;                   /*   412     4 */
						unsigned int   bi_bvec_done;             /*   416     4 */
					} __attribute__((__packed__)) bi_iter __attribute__((__aligned__(4))); /*   400    20 */
					union {
						/* typedef blk_qc_t */ unsigned int   bi_cookie; /*   420     4 */
						unsigned int   __bi_nr_segments;         /*   420     4 */
					};                                               /*   420     4 */
					union {
						/* typedef blk_qc_t */ unsigned int bi_cookie;   /*   368     4 */
						unsigned int __bi_nr_segments;                   /*   368     4 */
					};

					bio_end_io_t * bi_end_io;                        /*   424     8 */
					void * bi_private;                               /*   432     8 */
					struct blkcg_gq * bi_blkg;                       /*   440     8 */
					/* --- cacheline 7 boundary (448 bytes) --- */
					struct bio_issue {
						/* typedef u64 -> __u64 */ unsigned long long value; /*   448     8 */
					} bi_issue; /*   448     8 */
					/* typedef u64 -> __u64 */ unsigned long long bi_iocost_cost; /*   456     8 */
					union {
					};                                               /*   464     0 */
					union {
					};

					unsigned short bi_vcnt;                          /*   464     2 */
					unsigned short bi_max_vecs;                      /*   466     2 */
					/* typedef atomic_t */ struct {
						int            counter;                  /*   468     4 */
					} __bi_cnt; /*   468     4 */
					struct bio_vec * bi_io_vec;                      /*   472     8 */
					struct bio_set * bi_pool;                        /*   480     8 */
					struct bio_vec {
						struct page *  bv_page;                  /*   488     8 */
						unsigned int   bv_len;                   /*   496     4 */
						unsigned int   bv_offset;                /*   500     4 */
					} bi_inline_vecs[0]; /*   488     0 */
				} inline_bio; /*   368   120 */

				/* XXX last struct has 1 hole */

				struct request * rq;                                     /*   488     8 */
				struct work_struct {
					/* typedef atomic_long_t -> atomic64_t */ struct {
						/* typedef s64 -> __s64 */ long long      counter; /*   496     8 */
					} data; /*   496     8 */
					struct list_head {
						struct list_head * next;                 /*   504     8 */
						/* --- cacheline 8 boundary (512 bytes) --- */
						struct list_head * prev;                 /*   512     8 */
					} entry; /*   504    16 */
					/* typedef work_func_t */ void   (*func)(struct work_struct *); /*   520     8 */
				} work; /*   496    32 */
				/* typedef bool */ _Bool use_workqueue;                  /*   528     1 */
			} p;                                                             /*   368   168 */
		};                                                                       /*   368   168 */
		union {
			struct {
				struct bio {
					struct bio * bi_next;                                    /*   184     8 */
					struct block_device * bi_bdev;                           /*   192     8 */
					/* typedef blk_opf_t -> __u32 */ unsigned int bi_opf;    /*   200     4 */
					unsigned short bi_flags;                                 /*   204     2 */
					unsigned short bi_ioprio;                                /*   206     2 */
					enum rw_hint {
						WRITE_LIFE_NOT_SET = 0,
						WRITE_LIFE_NONE    = 1,
						WRITE_LIFE_SHORT   = 2,
						WRITE_LIFE_MEDIUM  = 3,
						WRITE_LIFE_LONG    = 4,
						WRITE_LIFE_EXTREME = 5,
					} __attribute__((__packed__)) bi_write_hint; /*   208     1 */
					/* typedef blk_status_t -> u8 -> __u8 */ unsigned char bi_status; /*   209     1 */

					/* XXX 2 bytes hole, try to pack */

					/* typedef atomic_t */ struct {
						int    counter;                                  /*   212     4 */
					} __bi_remaining; /*   212     4 */
					struct bvec_iter {
						/* typedef sector_t -> u64 -> __u64 */ unsigned long long bi_sector; /*   216     8 */
						unsigned int bi_size;                            /*   224     4 */
						unsigned int bi_idx;                             /*   228     4 */
						unsigned int bi_bvec_done;                       /*   232     4 */
					} __attribute__((__packed__)) bi_iter __attribute__((__aligned__(4))); /*   216    20 */
					union {
						/* typedef blk_qc_t */ unsigned int bi_cookie;   /*   236     4 */
						unsigned int __bi_nr_segments;                   /*   236     4 */
					};                                                       /*   236     4 */
					union {
						/* typedef blk_qc_t */ unsigned int bi_cookie;           /*   184     4 */
						unsigned int __bi_nr_segments;                           /*   184     4 */
					};

					bio_end_io_t * bi_end_io;                                /*   240     8 */
					void * bi_private;                                       /*   248     8 */
					struct blkcg_gq * bi_blkg;                               /*   256     8 */
					struct bio_issue {
						/* typedef u64 -> __u64 */ unsigned long long value; /*   264     8 */
					} bi_issue; /*   264     8 */
					/* typedef u64 -> __u64 */ unsigned long long bi_iocost_cost; /*   272     8 */
					union {
					};                                                       /*   280     0 */
					union {
					};

					unsigned short bi_vcnt;                                  /*   280     2 */
					unsigned short bi_max_vecs;                              /*   282     2 */
					/* typedef atomic_t */ struct {
						int    counter;                                  /*   284     4 */
					} __bi_cnt; /*   284     4 */
					struct bio_vec * bi_io_vec;                              /*   288     8 */
					struct bio_set * bi_pool;                                /*   296     8 */
					struct bio_vec {
						struct page * bv_page;                           /*   304     8 */
						unsigned int bv_len;                             /*   312     4 */
						unsigned int bv_offset;                          /*   316     4 */
					} bi_inline_vecs[0]; /*   304     0 */
				} inline_bio; /*   184   120 */

				/* XXX last struct has 1 hole */
			} b;                                                                     /*   184   120 */
			struct {
				/* typedef bool */ _Bool      mpool_alloc;                       /*   184     1 */

				/* XXX 7 bytes hole, try to pack */

				struct kiocb {
					struct file * ki_filp;                                   /*   192     8 */
					/* typedef loff_t -> __kernel_loff_t */ long long ki_pos; /*   200     8 */
					void (*ki_complete)(struct kiocb *, long);               /*   208     8 */
					void * private;                                          /*   216     8 */
					int ki_flags;                                            /*   224     4 */
					/* typedef u16 -> __u16 */ unsigned short ki_ioprio;     /*   228     2 */

					/* XXX 2 bytes hole, try to pack */

					union {
						struct wait_page_queue * ki_waitq;               /*   232     8 */
						ssize_t (*dio_complete)(void *);                 /*   232     8 */
					};                                                       /*   232     8 */
					union {
						struct wait_page_queue * ki_waitq;                       /*   192     8 */
						ssize_t (*dio_complete)(void *);                         /*   192     8 */
					};

				} iocb; /*   192    48 */

				/* XXX last struct has 1 hole */

				struct bio_vec * bvec;                                           /*   240     8 */
				struct work_struct {
					/* typedef atomic_long_t -> atomic64_t */ struct {
						/* typedef s64 -> __s64 */ long long counter;    /*   248     8 */
					} data; /*   248     8 */
					struct list_head {
						struct list_head * next;                         /*   256     8 */
						struct list_head * prev;                         /*   264     8 */
					} entry; /*   256    16 */
					/* typedef work_func_t */ void (*func)(struct work_struct *); /*   272     8 */
				} work; /*   248    32 */
			} f;                                                                     /*   184    96 */
			struct {
				struct bio {
					struct bio * bi_next;                                    /*   184     8 */
					struct block_device * bi_bdev;                           /*   192     8 */
					/* typedef blk_opf_t -> __u32 */ unsigned int bi_opf;    /*   200     4 */
					unsigned short bi_flags;                                 /*   204     2 */
					unsigned short bi_ioprio;                                /*   206     2 */
					enum rw_hint {
						WRITE_LIFE_NOT_SET = 0,
						WRITE_LIFE_NONE    = 1,
						WRITE_LIFE_SHORT   = 2,
						WRITE_LIFE_MEDIUM  = 3,
						WRITE_LIFE_LONG    = 4,
						WRITE_LIFE_EXTREME = 5,
					} __attribute__((__packed__)) bi_write_hint; /*   208     1 */
					/* typedef blk_status_t -> u8 -> __u8 */ unsigned char bi_status; /*   209     1 */

					/* XXX 2 bytes hole, try to pack */

					/* typedef atomic_t */ struct {
						int    counter;                                  /*   212     4 */
					} __bi_remaining; /*   212     4 */
					struct bvec_iter {
						/* typedef sector_t -> u64 -> __u64 */ unsigned long long bi_sector; /*   216     8 */
						unsigned int bi_size;                            /*   224     4 */
						unsigned int bi_idx;                             /*   228     4 */
						unsigned int bi_bvec_done;                       /*   232     4 */
					} __attribute__((__packed__)) bi_iter __attribute__((__aligned__(4))); /*   216    20 */
					union {
						/* typedef blk_qc_t */ unsigned int bi_cookie;   /*   236     4 */
						unsigned int __bi_nr_segments;                   /*   236     4 */
					};                                                       /*   236     4 */
					union {
						/* typedef blk_qc_t */ unsigned int bi_cookie;           /*   184     4 */
						unsigned int __bi_nr_segments;                           /*   184     4 */
					};

					bio_end_io_t * bi_end_io;                                /*   240     8 */
					void * bi_private;                                       /*   248     8 */
					struct blkcg_gq * bi_blkg;                               /*   256     8 */
					struct bio_issue {
						/* typedef u64 -> __u64 */ unsigned long long value; /*   264     8 */
					} bi_issue; /*   264     8 */
					/* typedef u64 -> __u64 */ unsigned long long bi_iocost_cost; /*   272     8 */
					union {
					};                                                       /*   280     0 */
					union {
					};

					unsigned short bi_vcnt;                                  /*   280     2 */
					unsigned short bi_max_vecs;                              /*   282     2 */
					/* typedef atomic_t */ struct {
						int    counter;                                  /*   284     4 */
					} __bi_cnt; /*   284     4 */
					struct bio_vec * bi_io_vec;                              /*   288     8 */
					struct bio_set * bi_pool;                                /*   296     8 */
					struct bio_vec {
						struct page * bv_page;                           /*   304     8 */
						unsigned int bv_len;                             /*   312     4 */
						unsigned int bv_offset;                          /*   316     4 */
					} bi_inline_vecs[0]; /*   304     0 */
				} inline_bio; /*   184   120 */

				/* XXX last struct has 1 hole */

				struct request * rq;                                             /*   304     8 */
				struct work_struct {
					/* typedef atomic_long_t -> atomic64_t */ struct {
						/* typedef s64 -> __s64 */ long long counter;    /*   312     8 */
					} data; /*   312     8 */
					struct list_head {
						struct list_head * next;                         /*   320     8 */
						struct list_head * prev;                         /*   328     8 */
					} entry; /*   320    16 */
					/* typedef work_func_t */ void (*func)(struct work_struct *); /*   336     8 */
				} work; /*   312    32 */
				/* typedef bool */ _Bool      use_workqueue;                     /*   344     1 */
			} p;                                                                     /*   184   168 */
		};

		/* --- cacheline 8 boundary (512 bytes) was 24 bytes ago --- */
		int                sg_cnt;                                               /*   536     4 */
		int                metadata_sg_cnt;                                      /*   540     4 */
		/* typedef size_t -> __kernel_size_t -> __kernel_ulong_t */ unsigned long      transfer_len; /*   544     8 */
		/* typedef size_t -> __kernel_size_t -> __kernel_ulong_t */ unsigned long      metadata_len; /*   552     8 */
		struct nvmet_port * port;                                                /*   560     8 */
		void               (*execute)(struct nvmet_req *);                       /*   568     8 */
		/* --- cacheline 9 boundary (576 bytes) --- */
		const struct nvmet_fabrics_ops  * ops;                                   /*   576     8 */
		struct pci_dev *   p2p_dev;                                              /*   584     8 */
		struct device *    p2p_client;                                           /*   592     8 */
		/* typedef u16 -> __u16 */ unsigned short     error_loc;                 /*   600     2 */

		/* XXX 6 bytes hole, try to pack */

		/* typedef u64 -> __u64 */ unsigned long long error_slba;                /*   608     8 */
	} req; /*   184   432 */

	/* XXX last struct has 1 hole */

	struct work_struct {
		/* typedef atomic_long_t -> atomic64_t */ struct {
			/* typedef s64 -> __s64 */ long long  counter;                   /*   616     8 */
		} data; /*   616     8 */
		struct list_head {
			struct list_head * next;                                         /*   624     8 */
			struct list_head * prev;                                         /*   632     8 */
		} entry; /*   624    16 */
		/* --- cacheline 10 boundary (640 bytes) --- */
		/* typedef work_func_t */ void               (*func)(struct work_struct *); /*   640     8 */
	} defer_work; /*   616    32 */
	struct nvmet_fc_tgtport *  tgtport;                                              /*   648     8 */
	struct nvmet_fc_tgt_queue * queue;                                               /*   656     8 */
	struct list_head {
		struct list_head * next;                                                 /*   664     8 */
		struct list_head * prev;                                                 /*   672     8 */
	} fcp_list; /*   664    16 */

	/* size: 680, cachelines: 11, members: 19 */
	/* sum members: 676, holes: 1, sum holes: 4 */
	/* member types with holes: 1, total: 1 */
	/* last cacheline: 40 bytes */
};

@GustavoARSilva
Copy link

GustavoARSilva commented May 30, 2024

Oh yes, that struct bio is nested in a bunch of places. It's already on my radar. ¬.¬

@nathanchance
Copy link
Member Author

Patch to remove __counted_by has been accepted: https://git.infradead.org/?p=nvme.git;a=commit;h=440e2051c577896275c0e0513ec26964e04c7810

@nathanchance nathanchance added [PATCH] Accepted A submitted patch has been accepted upstream and removed [PATCH] Submitted A patch has been submitted for review labels Jun 26, 2024
torvalds pushed a commit to torvalds/linux that referenced this issue Jun 28, 2024
Work for __counted_by on generic pointers in structures (not just
flexible array members) has started landing in Clang 19 (current tip of
tree). During the development of this feature, a restriction was added
to __counted_by to prevent the flexible array member's element type from
including a flexible array member itself such as:

  struct foo {
    int count;
    char buf[];
  };

  struct bar {
    int count;
    struct foo data[] __counted_by(count);
  };

because the size of data cannot be calculated with the standard array
size formula:

  sizeof(struct foo) * count

This restriction was downgraded to a warning but due to CONFIG_WERROR,
it can still break the build. The application of __counted_by on the fod
member of 'struct nvmet_fc_tgt_queue' triggers this restriction,
resulting in:

  drivers/nvme/target/fc.c:151:2: error: 'counted_by' should not be applied to an array with element of unknown size because 'struct nvmet_fc_fcp_iod' is a struct type with a flexible array member. This will be an error in a future compiler version [-Werror,-Wbounds-safety-counted-by-elt-type-unknown-size]
    151 |         struct nvmet_fc_fcp_iod         fod[] __counted_by(sqsize);
        |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1 error generated.

Remove this use of __counted_by to fix the warning/error. However,
rather than remove it altogether, leave it commented, as it may be
possible to support this in future compiler releases.

Cc: stable@vger.kernel.org
Closes: ClangBuiltLinux#2027
Fixes: ccd3129 ("nvmet-fc: Annotate struct nvmet_fc_tgt_queue with __counted_by")
Signed-off-by: Nathan Chancellor <nathan@kernel.org>
Signed-off-by: Keith Busch <kbusch@kernel.org>
johnny-mnemonic pushed a commit to linux-ia64/linux-stable-rc that referenced this issue Jul 2, 2024
commit 440e205 upstream.

Work for __counted_by on generic pointers in structures (not just
flexible array members) has started landing in Clang 19 (current tip of
tree). During the development of this feature, a restriction was added
to __counted_by to prevent the flexible array member's element type from
including a flexible array member itself such as:

  struct foo {
    int count;
    char buf[];
  };

  struct bar {
    int count;
    struct foo data[] __counted_by(count);
  };

because the size of data cannot be calculated with the standard array
size formula:

  sizeof(struct foo) * count

This restriction was downgraded to a warning but due to CONFIG_WERROR,
it can still break the build. The application of __counted_by on the fod
member of 'struct nvmet_fc_tgt_queue' triggers this restriction,
resulting in:

  drivers/nvme/target/fc.c:151:2: error: 'counted_by' should not be applied to an array with element of unknown size because 'struct nvmet_fc_fcp_iod' is a struct type with a flexible array member. This will be an error in a future compiler version [-Werror,-Wbounds-safety-counted-by-elt-type-unknown-size]
    151 |         struct nvmet_fc_fcp_iod         fod[] __counted_by(sqsize);
        |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1 error generated.

Remove this use of __counted_by to fix the warning/error. However,
rather than remove it altogether, leave it commented, as it may be
possible to support this in future compiler releases.

Cc: stable@vger.kernel.org
Closes: ClangBuiltLinux/linux#2027
Fixes: ccd3129 ("nvmet-fc: Annotate struct nvmet_fc_tgt_queue with __counted_by")
Signed-off-by: Nathan Chancellor <nathan@kernel.org>
Signed-off-by: Keith Busch <kbusch@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
@nathanchance
Copy link
Member Author

@nathanchance nathanchance added [FIXED][LINUX] 6.10 This bug was fixed in Linux 6.10 and removed [PATCH] Accepted A submitted patch has been accepted upstream labels Jul 2, 2024
johnny-mnemonic pushed a commit to linux-ia64/linux-stable-rc that referenced this issue Jul 3, 2024
commit 440e205 upstream.

Work for __counted_by on generic pointers in structures (not just
flexible array members) has started landing in Clang 19 (current tip of
tree). During the development of this feature, a restriction was added
to __counted_by to prevent the flexible array member's element type from
including a flexible array member itself such as:

  struct foo {
    int count;
    char buf[];
  };

  struct bar {
    int count;
    struct foo data[] __counted_by(count);
  };

because the size of data cannot be calculated with the standard array
size formula:

  sizeof(struct foo) * count

This restriction was downgraded to a warning but due to CONFIG_WERROR,
it can still break the build. The application of __counted_by on the fod
member of 'struct nvmet_fc_tgt_queue' triggers this restriction,
resulting in:

  drivers/nvme/target/fc.c:151:2: error: 'counted_by' should not be applied to an array with element of unknown size because 'struct nvmet_fc_fcp_iod' is a struct type with a flexible array member. This will be an error in a future compiler version [-Werror,-Wbounds-safety-counted-by-elt-type-unknown-size]
    151 |         struct nvmet_fc_fcp_iod         fod[] __counted_by(sqsize);
        |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1 error generated.

Remove this use of __counted_by to fix the warning/error. However,
rather than remove it altogether, leave it commented, as it may be
possible to support this in future compiler releases.

Cc: stable@vger.kernel.org
Closes: ClangBuiltLinux/linux#2027
Fixes: ccd3129 ("nvmet-fc: Annotate struct nvmet_fc_tgt_queue with __counted_by")
Signed-off-by: Nathan Chancellor <nathan@kernel.org>
Signed-off-by: Keith Busch <kbusch@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
johnny-mnemonic pushed a commit to linux-ia64/linux-stable-rc that referenced this issue Jul 3, 2024
commit 440e205 upstream.

Work for __counted_by on generic pointers in structures (not just
flexible array members) has started landing in Clang 19 (current tip of
tree). During the development of this feature, a restriction was added
to __counted_by to prevent the flexible array member's element type from
including a flexible array member itself such as:

  struct foo {
    int count;
    char buf[];
  };

  struct bar {
    int count;
    struct foo data[] __counted_by(count);
  };

because the size of data cannot be calculated with the standard array
size formula:

  sizeof(struct foo) * count

This restriction was downgraded to a warning but due to CONFIG_WERROR,
it can still break the build. The application of __counted_by on the fod
member of 'struct nvmet_fc_tgt_queue' triggers this restriction,
resulting in:

  drivers/nvme/target/fc.c:151:2: error: 'counted_by' should not be applied to an array with element of unknown size because 'struct nvmet_fc_fcp_iod' is a struct type with a flexible array member. This will be an error in a future compiler version [-Werror,-Wbounds-safety-counted-by-elt-type-unknown-size]
    151 |         struct nvmet_fc_fcp_iod         fod[] __counted_by(sqsize);
        |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1 error generated.

Remove this use of __counted_by to fix the warning/error. However,
rather than remove it altogether, leave it commented, as it may be
possible to support this in future compiler releases.

Cc: stable@vger.kernel.org
Closes: ClangBuiltLinux/linux#2027
Fixes: ccd3129 ("nvmet-fc: Annotate struct nvmet_fc_tgt_queue with __counted_by")
Signed-off-by: Nathan Chancellor <nathan@kernel.org>
Signed-off-by: Keith Busch <kbusch@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
johnny-mnemonic pushed a commit to linux-ia64/linux-stable-rc that referenced this issue Jul 4, 2024
commit 440e205 upstream.

Work for __counted_by on generic pointers in structures (not just
flexible array members) has started landing in Clang 19 (current tip of
tree). During the development of this feature, a restriction was added
to __counted_by to prevent the flexible array member's element type from
including a flexible array member itself such as:

  struct foo {
    int count;
    char buf[];
  };

  struct bar {
    int count;
    struct foo data[] __counted_by(count);
  };

because the size of data cannot be calculated with the standard array
size formula:

  sizeof(struct foo) * count

This restriction was downgraded to a warning but due to CONFIG_WERROR,
it can still break the build. The application of __counted_by on the fod
member of 'struct nvmet_fc_tgt_queue' triggers this restriction,
resulting in:

  drivers/nvme/target/fc.c:151:2: error: 'counted_by' should not be applied to an array with element of unknown size because 'struct nvmet_fc_fcp_iod' is a struct type with a flexible array member. This will be an error in a future compiler version [-Werror,-Wbounds-safety-counted-by-elt-type-unknown-size]
    151 |         struct nvmet_fc_fcp_iod         fod[] __counted_by(sqsize);
        |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1 error generated.

Remove this use of __counted_by to fix the warning/error. However,
rather than remove it altogether, leave it commented, as it may be
possible to support this in future compiler releases.

Cc: stable@vger.kernel.org
Closes: ClangBuiltLinux/linux#2027
Fixes: ccd3129 ("nvmet-fc: Annotate struct nvmet_fc_tgt_queue with __counted_by")
Signed-off-by: Nathan Chancellor <nathan@kernel.org>
Signed-off-by: Keith Busch <kbusch@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
johnny-mnemonic pushed a commit to linux-ia64/linux-stable-rc that referenced this issue Jul 5, 2024
commit 440e205 upstream.

Work for __counted_by on generic pointers in structures (not just
flexible array members) has started landing in Clang 19 (current tip of
tree). During the development of this feature, a restriction was added
to __counted_by to prevent the flexible array member's element type from
including a flexible array member itself such as:

  struct foo {
    int count;
    char buf[];
  };

  struct bar {
    int count;
    struct foo data[] __counted_by(count);
  };

because the size of data cannot be calculated with the standard array
size formula:

  sizeof(struct foo) * count

This restriction was downgraded to a warning but due to CONFIG_WERROR,
it can still break the build. The application of __counted_by on the fod
member of 'struct nvmet_fc_tgt_queue' triggers this restriction,
resulting in:

  drivers/nvme/target/fc.c:151:2: error: 'counted_by' should not be applied to an array with element of unknown size because 'struct nvmet_fc_fcp_iod' is a struct type with a flexible array member. This will be an error in a future compiler version [-Werror,-Wbounds-safety-counted-by-elt-type-unknown-size]
    151 |         struct nvmet_fc_fcp_iod         fod[] __counted_by(sqsize);
        |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1 error generated.

Remove this use of __counted_by to fix the warning/error. However,
rather than remove it altogether, leave it commented, as it may be
possible to support this in future compiler releases.

Cc: stable@vger.kernel.org
Closes: ClangBuiltLinux/linux#2027
Fixes: ccd3129 ("nvmet-fc: Annotate struct nvmet_fc_tgt_queue with __counted_by")
Signed-off-by: Nathan Chancellor <nathan@kernel.org>
Signed-off-by: Keith Busch <kbusch@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
johnny-mnemonic pushed a commit to linux-ia64/linux-stable-rc that referenced this issue Jul 5, 2024
commit 440e205 upstream.

Work for __counted_by on generic pointers in structures (not just
flexible array members) has started landing in Clang 19 (current tip of
tree). During the development of this feature, a restriction was added
to __counted_by to prevent the flexible array member's element type from
including a flexible array member itself such as:

  struct foo {
    int count;
    char buf[];
  };

  struct bar {
    int count;
    struct foo data[] __counted_by(count);
  };

because the size of data cannot be calculated with the standard array
size formula:

  sizeof(struct foo) * count

This restriction was downgraded to a warning but due to CONFIG_WERROR,
it can still break the build. The application of __counted_by on the fod
member of 'struct nvmet_fc_tgt_queue' triggers this restriction,
resulting in:

  drivers/nvme/target/fc.c:151:2: error: 'counted_by' should not be applied to an array with element of unknown size because 'struct nvmet_fc_fcp_iod' is a struct type with a flexible array member. This will be an error in a future compiler version [-Werror,-Wbounds-safety-counted-by-elt-type-unknown-size]
    151 |         struct nvmet_fc_fcp_iod         fod[] __counted_by(sqsize);
        |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1 error generated.

Remove this use of __counted_by to fix the warning/error. However,
rather than remove it altogether, leave it commented, as it may be
possible to support this in future compiler releases.

Cc: stable@vger.kernel.org
Closes: ClangBuiltLinux/linux#2027
Fixes: ccd3129 ("nvmet-fc: Annotate struct nvmet_fc_tgt_queue with __counted_by")
Signed-off-by: Nathan Chancellor <nathan@kernel.org>
Signed-off-by: Keith Busch <kbusch@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
gregkh pushed a commit to gregkh/linux that referenced this issue Jul 5, 2024
commit 440e205 upstream.

Work for __counted_by on generic pointers in structures (not just
flexible array members) has started landing in Clang 19 (current tip of
tree). During the development of this feature, a restriction was added
to __counted_by to prevent the flexible array member's element type from
including a flexible array member itself such as:

  struct foo {
    int count;
    char buf[];
  };

  struct bar {
    int count;
    struct foo data[] __counted_by(count);
  };

because the size of data cannot be calculated with the standard array
size formula:

  sizeof(struct foo) * count

This restriction was downgraded to a warning but due to CONFIG_WERROR,
it can still break the build. The application of __counted_by on the fod
member of 'struct nvmet_fc_tgt_queue' triggers this restriction,
resulting in:

  drivers/nvme/target/fc.c:151:2: error: 'counted_by' should not be applied to an array with element of unknown size because 'struct nvmet_fc_fcp_iod' is a struct type with a flexible array member. This will be an error in a future compiler version [-Werror,-Wbounds-safety-counted-by-elt-type-unknown-size]
    151 |         struct nvmet_fc_fcp_iod         fod[] __counted_by(sqsize);
        |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1 error generated.

Remove this use of __counted_by to fix the warning/error. However,
rather than remove it altogether, leave it commented, as it may be
possible to support this in future compiler releases.

Cc: stable@vger.kernel.org
Closes: ClangBuiltLinux/linux#2027
Fixes: ccd3129 ("nvmet-fc: Annotate struct nvmet_fc_tgt_queue with __counted_by")
Signed-off-by: Nathan Chancellor <nathan@kernel.org>
Signed-off-by: Keith Busch <kbusch@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
brauner pushed a commit to brauner/linux that referenced this issue Jul 18, 2024
Work for __counted_by on generic pointers in structures (not just
flexible array members) has started landing in Clang 19 (current tip of
tree). During the development of this feature, a restriction was added
to __counted_by to prevent the flexible array member's element type from
including a flexible array member itself such as:

  struct foo {
    int count;
    char buf[];
  };

  struct bar {
    int count;
    struct foo data[] __counted_by(count);
  };

because the size of data cannot be calculated with the standard array
size formula:

  sizeof(struct foo) * count

This restriction was downgraded to a warning but due to CONFIG_WERROR,
it can still break the build. The application of __counted_by on the fod
member of 'struct nvmet_fc_tgt_queue' triggers this restriction,
resulting in:

  drivers/nvme/target/fc.c:151:2: error: 'counted_by' should not be applied to an array with element of unknown size because 'struct nvmet_fc_fcp_iod' is a struct type with a flexible array member. This will be an error in a future compiler version [-Werror,-Wbounds-safety-counted-by-elt-type-unknown-size]
    151 |         struct nvmet_fc_fcp_iod         fod[] __counted_by(sqsize);
        |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1 error generated.

Remove this use of __counted_by to fix the warning/error. However,
rather than remove it altogether, leave it commented, as it may be
possible to support this in future compiler releases.

Cc: stable@vger.kernel.org
Closes: ClangBuiltLinux/linux#2027
Fixes: ccd3129 ("nvmet-fc: Annotate struct nvmet_fc_tgt_queue with __counted_by")
Signed-off-by: Nathan Chancellor <nathan@kernel.org>
Signed-off-by: Keith Busch <kbusch@kernel.org>
jhautbois pushed a commit to YoseliSAS/linux that referenced this issue Aug 21, 2024
Work for __counted_by on generic pointers in structures (not just
flexible array members) has started landing in Clang 19 (current tip of
tree). During the development of this feature, a restriction was added
to __counted_by to prevent the flexible array member's element type from
including a flexible array member itself such as:

  struct foo {
    int count;
    char buf[];
  };

  struct bar {
    int count;
    struct foo data[] __counted_by(count);
  };

because the size of data cannot be calculated with the standard array
size formula:

  sizeof(struct foo) * count

This restriction was downgraded to a warning but due to CONFIG_WERROR,
it can still break the build. The application of __counted_by on the fod
member of 'struct nvmet_fc_tgt_queue' triggers this restriction,
resulting in:

  drivers/nvme/target/fc.c:151:2: error: 'counted_by' should not be applied to an array with element of unknown size because 'struct nvmet_fc_fcp_iod' is a struct type with a flexible array member. This will be an error in a future compiler version [-Werror,-Wbounds-safety-counted-by-elt-type-unknown-size]
    151 |         struct nvmet_fc_fcp_iod         fod[] __counted_by(sqsize);
        |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1 error generated.

Remove this use of __counted_by to fix the warning/error. However,
rather than remove it altogether, leave it commented, as it may be
possible to support this in future compiler releases.

Cc: stable@vger.kernel.org
Closes: ClangBuiltLinux#2027
Fixes: ccd3129 ("nvmet-fc: Annotate struct nvmet_fc_tgt_queue with __counted_by")
Signed-off-by: Nathan Chancellor <nathan@kernel.org>
Signed-off-by: Keith Busch <kbusch@kernel.org>
tuxedo-bot pushed a commit to tuxedocomputers/linux that referenced this issue Sep 13, 2024
BugLink: https://bugs.launchpad.net/bugs/2076435

commit 440e205 upstream.

Work for __counted_by on generic pointers in structures (not just
flexible array members) has started landing in Clang 19 (current tip of
tree). During the development of this feature, a restriction was added
to __counted_by to prevent the flexible array member's element type from
including a flexible array member itself such as:

  struct foo {
    int count;
    char buf[];
  };

  struct bar {
    int count;
    struct foo data[] __counted_by(count);
  };

because the size of data cannot be calculated with the standard array
size formula:

  sizeof(struct foo) * count

This restriction was downgraded to a warning but due to CONFIG_WERROR,
it can still break the build. The application of __counted_by on the fod
member of 'struct nvmet_fc_tgt_queue' triggers this restriction,
resulting in:

  drivers/nvme/target/fc.c:151:2: error: 'counted_by' should not be applied to an array with element of unknown size because 'struct nvmet_fc_fcp_iod' is a struct type with a flexible array member. This will be an error in a future compiler version [-Werror,-Wbounds-safety-counted-by-elt-type-unknown-size]
    151 |         struct nvmet_fc_fcp_iod         fod[] __counted_by(sqsize);
        |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1 error generated.

Remove this use of __counted_by to fix the warning/error. However,
rather than remove it altogether, leave it commented, as it may be
possible to support this in future compiler releases.

Cc: stable@vger.kernel.org
Closes: ClangBuiltLinux/linux#2027
Fixes: ccd3129 ("nvmet-fc: Annotate struct nvmet_fc_tgt_queue with __counted_by")
Signed-off-by: Nathan Chancellor <nathan@kernel.org>
Signed-off-by: Keith Busch <kbusch@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Portia Stephens <portia.stephens@canonical.com>
Signed-off-by: Roxana Nicolescu <roxana.nicolescu@canonical.com>
tuxedo-bot pushed a commit to tuxedocomputers/linux that referenced this issue Sep 27, 2024
BugLink: https://bugs.launchpad.net/bugs/2076435

commit 440e205 upstream.

Work for __counted_by on generic pointers in structures (not just
flexible array members) has started landing in Clang 19 (current tip of
tree). During the development of this feature, a restriction was added
to __counted_by to prevent the flexible array member's element type from
including a flexible array member itself such as:

  struct foo {
    int count;
    char buf[];
  };

  struct bar {
    int count;
    struct foo data[] __counted_by(count);
  };

because the size of data cannot be calculated with the standard array
size formula:

  sizeof(struct foo) * count

This restriction was downgraded to a warning but due to CONFIG_WERROR,
it can still break the build. The application of __counted_by on the fod
member of 'struct nvmet_fc_tgt_queue' triggers this restriction,
resulting in:

  drivers/nvme/target/fc.c:151:2: error: 'counted_by' should not be applied to an array with element of unknown size because 'struct nvmet_fc_fcp_iod' is a struct type with a flexible array member. This will be an error in a future compiler version [-Werror,-Wbounds-safety-counted-by-elt-type-unknown-size]
    151 |         struct nvmet_fc_fcp_iod         fod[] __counted_by(sqsize);
        |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1 error generated.

Remove this use of __counted_by to fix the warning/error. However,
rather than remove it altogether, leave it commented, as it may be
possible to support this in future compiler releases.

Cc: stable@vger.kernel.org
Closes: ClangBuiltLinux/linux#2027
Fixes: ccd3129 ("nvmet-fc: Annotate struct nvmet_fc_tgt_queue with __counted_by")
Signed-off-by: Nathan Chancellor <nathan@kernel.org>
Signed-off-by: Keith Busch <kbusch@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Portia Stephens <portia.stephens@canonical.com>
Signed-off-by: Roxana Nicolescu <roxana.nicolescu@canonical.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
-Wbounds-safety-counted-by-elt-type-unknown-size [BUG] linux A bug that should be fixed in the mainline kernel. [FIXED][LINUX] 6.10 This bug was fixed in Linux 6.10
Projects
None yet
Development

No branches or pull requests

2 participants