]> git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/commitdiff
RDMA/srp: Apply the __packed attribute to members instead of structures
authorBart Van Assche <bvanassche@acm.org>
Mon, 24 May 2021 04:12:09 +0000 (21:12 -0700)
committerJason Gunthorpe <jgg@nvidia.com>
Fri, 28 May 2021 23:21:20 +0000 (20:21 -0300)
Applying the __packed attribute to an entire data structure results in
suboptimal code on architectures that do not support unaligned accesses.
Hence apply the __packed attribute only to those data members that are
not naturally aligned.

Link: https://lore.kernel.org/r/20210524041211.9480-4-bvanassche@acm.org
Cc: Nicolas Morey-Chaisemartin <nmoreychaisemartin@suse.com>
Signed-off-by: Bart Van Assche <bvanassche@acm.org>
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
include/scsi/srp.h

index 177d8026e96f5fba4192695c692cb7b1c4338461..dfe0984b58a9ff46fd28dce0d1d632b56fa2231b 100644 (file)
@@ -107,10 +107,10 @@ struct srp_direct_buf {
  * having the 20-byte structure padded to 24 bytes on 64-bit architectures.
  */
 struct srp_indirect_buf {
-       struct srp_direct_buf   table_desc;
+       struct srp_direct_buf   table_desc __packed __aligned(4);
        __be32                  len;
-       struct srp_direct_buf   desc_list[];
-} __attribute__((packed));
+       struct srp_direct_buf   desc_list[] __packed __aligned(4);
+};
 
 /* Immediate data buffer descriptor as defined in SRP2. */
 struct srp_imm_buf {
@@ -175,13 +175,13 @@ struct srp_login_rsp {
        u8      opcode;
        u8      reserved1[3];
        __be32  req_lim_delta;
-       u64     tag;
+       u64     tag __packed __aligned(4);
        __be32  max_it_iu_len;
        __be32  max_ti_iu_len;
        __be16  buf_fmt;
        u8      rsp_flags;
        u8      reserved2[25];
-} __attribute__((packed));
+};
 
 struct srp_login_rej {
        u8      opcode;
@@ -207,10 +207,6 @@ struct srp_t_logout {
        u64     tag;
 };
 
-/*
- * We need the packed attribute because the SRP spec only aligns the
- * 8-byte LUN field to 4 bytes.
- */
 struct srp_tsk_mgmt {
        u8      opcode;
        u8      sol_not;
@@ -225,10 +221,6 @@ struct srp_tsk_mgmt {
        u8      reserved5[8];
 };
 
-/*
- * We need the packed attribute because the SRP spec only aligns the
- * 8-byte LUN field to 4 bytes.
- */
 struct srp_cmd {
        u8      opcode;
        u8      sol_not;
@@ -266,7 +258,7 @@ struct srp_rsp {
        u8      sol_not;
        u8      reserved1[2];
        __be32  req_lim_delta;
-       u64     tag;
+       u64     tag __packed __aligned(4);
        u8      reserved2[2];
        u8      flags;
        u8      status;
@@ -275,7 +267,7 @@ struct srp_rsp {
        __be32  sense_data_len;
        __be32  resp_data_len;
        u8      data[];
-} __attribute__((packed));
+};
 
 struct srp_cred_req {
        u8      opcode;
@@ -301,13 +293,13 @@ struct srp_aer_req {
        u8      sol_not;
        u8      reserved[2];
        __be32  req_lim_delta;
-       u64     tag;
+       u64     tag __packed __aligned(4);
        u32     reserved2;
        struct scsi_lun lun;
        __be32  sense_data_len;
        u32     reserved3;
        u8      sense_data[];
-} __attribute__((packed));
+};
 
 struct srp_aer_rsp {
        u8      opcode;