Commit 6dc26498 authored by Bart Van Assche's avatar Bart Van Assche Committed by Jason Gunthorpe
Browse files

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: default avatarBart Van Assche <bvanassche@acm.org>
Signed-off-by: default avatarJason Gunthorpe <jgg@nvidia.com>
parent c838de1a
Loading
Loading
Loading
Loading
+9 −17
Original line number Diff line number Diff line
@@ -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;