lkml.org 
[lkml]   [2012]   [Oct]   [11]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: [RESEND PATCH] scsi: make struct scsi_varlen_cdb_hdr packed
On 11/10/12 11:01, Bart Van Assche wrote:
> On 10/11/12 11:15, James Hogan wrote:
>> The struct scsi_varlen_cdb_hdr is expected to be exactly 10 bytes when
>> used in struct osd_cdb_head, but it isn't marked as packed. Some
>> architectures will round the struct size up which triggers BUILD_BUG_ON
>> compile errors in osd_initiator.c when the outer structs are unexpected
>> sizes. This is fixed by marking struct scsi_varlen_cdb_hdr as __packed.
>>
>> Signed-off-by: James Hogan <james.hogan@imgtec.com>
>> ---
>> include/scsi/scsi.h | 2 +-
>> 1 files changed, 1 insertions(+), 1 deletions(-)
>>
>> diff --git a/include/scsi/scsi.h b/include/scsi/scsi.h
>> index 66216c1..3beaef3 100644
>> --- a/include/scsi/scsi.h
>> +++ b/include/scsi/scsi.h
>> @@ -198,7 +198,7 @@ struct scsi_varlen_cdb_hdr {
>> __u8 additional_cdb_length; /* total cdb length - 8 */
>> __be16 service_action;
>> /* service specific data follows */
>> -};
>> +} __packed;
>>
>> static inline unsigned
>> scsi_varlen_cdb_length(const void *hdr)
>
> Hello James,
>
> Are you aware that __packed can also be used on individual struct
> members and that doing so has a lower performance penalty than using the
> __packed attribute on an entire struct ? See e.g. <linux/sysv_fs.h> for
> an example.

Hi Bart,

Thanks, I wasn't aware of that, however the problem is the size of the
struct as a whole rather than the alignment or offsets of any individual
data members. E.g. adding __attribute__((packed,aligned(2))) to the
16bit member doesn't reduce the struct to 10 bytes, or change the offset
from 8 bytes.

Cheers
James



\
 
 \ /
  Last update: 2012-10-11 13:41    [W:0.085 / U:0.320 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site