From: Boaz Harrosh <bharrosh@panasas.com>
To: "Jörn Engel" <joern@logfs.org>
Cc: James Bottomley <James.Bottomley@HansenPartnership.com>,
Andrew Morton <akpm@linux-foundation.org>,
open-osd development <osd-dev@open-osd.org>,
Mike Christie <michaelc@cs.wisc.edu>,
FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>,
Jeff Garzik <jeff@garzik.org>,
linux-scsi <linux-scsi@vger.kernel.org>,
Sami.Iren@seagate.com,
linux-kernel <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH 03/18 ver2] libosd: OSDv1 Headers
Date: Mon, 10 Nov 2008 10:47:07 +0200 [thread overview]
Message-ID: <4917F50B.3000905@panasas.com> (raw)
In-Reply-To: <20081109174509.GB5350@logfs.org>
Jörn Engel wrote:
> On Sun, 9 November 2008 16:52:36 +0200, Boaz Harrosh wrote:
>> +struct osdv1_cdb {
>> + struct osd_cdb_head h;
>> + u8 caps[OSDv1_CAP_LEN];
>> + struct osd_security_parameters sec_params;
>> +} __packed;
>
> __packed can result in slow code being generated. But removing the
> attribute can lead to bugs on other architectures. F.e. the size of
> the structure below is different for i386 and x86_64.
>
> struct foo {
> u64 bar;
> u32 baz;
> };
>
> My personal solution is to use this little macro and then just follow
> every structure defition with a size check.
>
> #define SIZE_CHECK(type, size) \
> static inline void check_##type(void) \
> { \
> BUILD_BUG_ON(sizeof(struct type) != (size)); \
> }
> ...
> struct foo {
> u64 bar;
> u32 baz;
> };
>
> SIZE_CHECK(foo, 12);
>
> The above would not compile on x86_64 and clearly indicate a missing
> __packed. In other cases the attribute can be removed.
>
> Jörn
>
Hi Jörn
Thank you for your comments
I do have a size check that governs the complete structure it is the first
code in osd_initiator.c at build_test(). It will catch any discrepancies
from the protocol.
I have done some experimentation with __packed both on 32 and 64 bit x86.
When it does nothing like the above foo in 32bit, then there is no code
difference with it or with out it, but on 64bit I must have it otherwise
the structure grows.
These are all, on-the-wire structures. I must have __packed, otherwise
I'm at the compiler mercy and that's bad.
If the assembly - size and offsets - of foo is exactly the same with or
without the __packed, but the generated code is different then clearly this
is a compiler bug. I've herd of this myth before, and at least with my
gcc 4.1.2 there is no such bug. Either the structure gets packed, or there is
no difference. All the places I have __packed in the code are absolutely must
be so, stated by the protocol.
Boaz
next prev parent reply other threads:[~2008-11-10 8:47 UTC|newest]
Thread overview: 85+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <48876009.8010701@panasas.com>
2008-11-04 16:09 ` [PATCHSET 00/18] open-osd: OSD Initiator library for Linux Boaz Harrosh
2008-11-04 16:17 ` [PATCH 01/18] major.h: char-major number for OSD device driver Boaz Harrosh
2008-11-26 17:33 ` [osd-dev] " Boaz Harrosh
2008-11-26 18:07 ` Randy Dunlap
2008-11-04 16:42 ` [PATCH 02/18] scsi: OSD_TYPE Boaz Harrosh
2008-11-04 16:44 ` [PATCH 03/18] libosd: OSDv1 Headers Boaz Harrosh
2008-11-04 19:10 ` Andrew Morton
2008-11-04 19:42 ` Jörn Engel
2008-11-04 20:29 ` Jörn Engel
2008-11-05 13:00 ` Boaz Harrosh
2008-11-05 12:54 ` Boaz Harrosh
2008-11-05 13:09 ` James Bottomley
2008-11-05 13:29 ` Boaz Harrosh
2008-11-09 14:52 ` [PATCH 03/18 ver2] " Boaz Harrosh
2008-11-09 17:45 ` Jörn Engel
2008-11-10 8:47 ` Boaz Harrosh [this message]
2008-11-10 15:17 ` Jörn Engel
2008-11-10 17:29 ` Randy Dunlap
2008-11-12 13:10 ` Boaz Harrosh
2008-11-12 16:48 ` Randy Dunlap
2008-11-12 17:09 ` Boaz Harrosh
2008-11-12 17:15 ` Johannes Berg
2008-11-12 13:13 ` [PATCH 03/18 ver3] " Boaz Harrosh
2008-11-12 18:59 ` Randy Dunlap
2008-11-13 9:38 ` Boaz Harrosh
2008-11-13 12:25 ` [PATCH 03/18 ver4] " Boaz Harrosh
2008-11-13 18:16 ` Randy Dunlap
2008-11-13 15:41 ` [osd-dev] " Benny Halevy
2008-11-04 16:44 ` [PATCH 04/18] libosd: OSDv1 preliminary implementation Boaz Harrosh
2008-11-04 18:03 ` Sam Ravnborg
2008-11-05 13:12 ` Boaz Harrosh
2008-11-09 14:55 ` [osd-dev] " Boaz Harrosh
2008-11-10 5:37 ` Randy Dunlap
2008-11-10 9:00 ` Boaz Harrosh
2008-11-05 16:39 ` [Patch] Always include <linux/types.h> Jörn Engel
2008-11-05 17:23 ` Alexey Dobriyan
2008-11-05 19:16 ` Jörn Engel
2008-11-05 19:48 ` Andreas Schwab
2008-11-05 20:02 ` Jörn Engel
2008-11-05 20:32 ` Alexey Dobriyan
2008-11-07 8:02 ` Jörn Engel
2008-11-05 20:20 ` Alexey Dobriyan
2008-11-05 17:48 ` Boaz Harrosh
2008-11-04 19:16 ` [PATCH 04/18] libosd: OSDv1 preliminary implementation Andrew Morton
2008-11-05 13:44 ` Boaz Harrosh
2008-11-09 14:50 ` [PATCH 04/18 ver2] " Boaz Harrosh
2008-11-04 16:44 ` [PATCH 05/18] osd_uld: OSD scsi ULD Boaz Harrosh
2008-11-04 16:44 ` [PATCH 06/18] osd_uld: API for retrieving osd devices from Kernel Boaz Harrosh
2008-11-04 16:44 ` [PATCH 07/18] osd_test: User-mode application to run the OSD tests Boaz Harrosh
2008-11-04 16:44 ` [PATCH 08/18] osd_ktests: Add basic " Boaz Harrosh
2008-11-04 16:44 ` [PATCH 09/18] libosd: attributes Support Boaz Harrosh
2008-11-04 16:44 ` [PATCH 10/18] osd_ktests: Test Attribute lists Boaz Harrosh
2008-11-04 16:44 ` [PATCH 11/18] libosd: OSD Security processing stubs Boaz Harrosh
2008-11-04 16:44 ` [PATCH 12/18] libosd: Add Flush and List-objects support Boaz Harrosh
2008-11-04 16:44 ` [PATCH 13/18] libosd: Not implemented commands Boaz Harrosh
2008-11-04 16:44 ` [PATCH 15/18] libosd: OSDv2 auto detection Boaz Harrosh
2008-11-04 16:44 ` [PATCH 14/18] libosd: OSD version 2 Support Boaz Harrosh
2008-11-04 16:44 ` [PATCH 16/18] osd: Documentation for OSD library Boaz Harrosh
2008-11-04 16:44 ` [PATCH 17/18] osd: Kconfig file for in-tree builds Boaz Harrosh
2008-11-04 16:44 ` [PATCH 18/18] scsi: Add osd library to build system Boaz Harrosh
2008-11-04 19:19 ` [PATCHSET 00/18] open-osd: OSD Initiator library for Linux Andrew Morton
2008-11-05 13:56 ` Boaz Harrosh
2008-11-09 14:58 ` Boaz Harrosh
2008-11-09 23:26 ` Stephen Rothwell
2008-11-10 12:52 ` Boaz Harrosh
2008-11-10 13:04 ` Stephen Rothwell
2008-12-22 12:32 ` Boaz Harrosh
2008-12-22 12:37 ` [PATCH 01/18] major.h: char-major number for OSD device driver Boaz Harrosh
2008-12-22 12:39 ` [PATCH 02/18] scsi: OSD_TYPE Boaz Harrosh
2008-12-22 12:41 ` [PATCH 03/18] libosd: OSDv1 Headers Boaz Harrosh
2008-12-22 12:43 ` [PATCH 04/18] libosd: OSDv1 preliminary implementation Boaz Harrosh
2008-12-22 12:46 ` [PATCH 05/18] osd_uld: OSD scsi ULD Boaz Harrosh
2008-12-22 12:49 ` [PATCH 06/18] osd_uld: API for retrieving osd devices from Kernel Boaz Harrosh
2008-12-22 12:51 ` [PATCH 07/18] osd_ktests: Add basic OSD tests Boaz Harrosh
2008-12-22 12:55 ` [PATCH 08/18] libosd: attributes Support Boaz Harrosh
2008-12-22 12:57 ` [PATCH 09/18] osd_ktests: Test Attribute lists Boaz Harrosh
2008-12-22 13:00 ` [PATCH 10/18] libosd: OSD Security processing stubs Boaz Harrosh
2008-12-22 13:02 ` [PATCH 11/18] libosd: Add Flush and List-objects support Boaz Harrosh
2008-12-22 13:04 ` [PATCH 12/18] libosd: Not implemented commands Boaz Harrosh
2008-12-22 13:07 ` [PATCH 13/18] libosd: OSD version 2 Support Boaz Harrosh
2008-12-22 13:09 ` [PATCH 14/18] libosd: OSDv2 auto detection Boaz Harrosh
2008-12-22 13:13 ` [PATCH 15/18] libosd: SCSI/OSD Sense decoding support Boaz Harrosh
2008-12-22 13:16 ` [PATCH 16/18] osd: Documentation for OSD library Boaz Harrosh
2008-12-22 13:18 ` [PATCH 17/18] osd: Kconfig file for in-tree builds Boaz Harrosh
2008-12-22 13:20 ` [PATCH 18/18] scsi: Add osd library to build system Boaz Harrosh
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4917F50B.3000905@panasas.com \
--to=bharrosh@panasas.com \
--cc=James.Bottomley@HansenPartnership.com \
--cc=Sami.Iren@seagate.com \
--cc=akpm@linux-foundation.org \
--cc=fujita.tomonori@lab.ntt.co.jp \
--cc=jeff@garzik.org \
--cc=joern@logfs.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-scsi@vger.kernel.org \
--cc=michaelc@cs.wisc.edu \
--cc=osd-dev@open-osd.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox