Re: [PATCH 3/5] RDMA/srp: Apply the __packed attribute to members instead of structures

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Sun, May 23, 2021 at 08:41:25PM -0700, Bart Van Assche wrote:
> On 5/20/21 7:48 AM, Jason Gunthorpe wrote:
> > On Tue, May 11, 2021 at 08:27:50PM -0700, Bart Van Assche wrote:
> >> @@ -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;
> >>  	__be32			len;
> >> -	struct srp_direct_buf	desc_list[];
> >> -} __attribute__((packed));
> >> +	struct srp_direct_buf	desc_list[] __packed;
> >> +};
> >>  
> >>  /* 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;
> > 
> > What you really want is just something like this:
> > 
> > typedef u64 __attribute__((aligned(4))) compat_u64;
> > 
> > And then use that every place you have the u64 and forget about packed
> > entirely.
> 
> Really? My understanding is that the aligned attribute can be used to
> increase alignment of a structure member but not to decrease it. 

I didn't test it, but that is pre-existing code in Linux.. Maybe it
doesn't work and/or needs packed too

> Additionally, there is a recommendation in
> Documentation/process/coding-style.rst not to introduce new typedefs.

That we tend to selective ignore <shrug>

> > Except for a couple exceptions IBA mads are always aligned to 4 bytes,
> > only the 64 bit quantities are unaligned.
> > 
> > But really this whole thing should be replaced with the IBA_FIELD
> > macros like include/rdma/ibta_vol1_c12.h demos.
> > 
> > Then it would be sparse safe and obviously endian correct as well.
> 
> I prefer a structure over the IBA_FIELD macros so I will change __packed
> into __packed __aligned(4).

IMHO the struct is alot worse due to lack of endian safety and
complexity in establishing the layout.

Jason



[Index of Archives]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Photo]     [Yosemite News]     [Yosemite Photos]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux