Messages in this thread | | | Date | Thu, 11 Oct 2012 12:01:48 +0200 | From | Bart Van Assche <> | Subject | Re: [RESEND PATCH] scsi: make struct scsi_varlen_cdb_hdr packed |
| |
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.
Bart.
| |