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@xxxxxxxxxx> >> --- >> 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 -- To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html