RDMA/srp: Apply the __packed attribute to members instead of structures
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>
This commit is contained in:
Родитель
c838de1af1
Коммит
6dc26498e1
|
@ -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;
|
||||
|
|
Загрузка…
Ссылка в новой задаче