Apparently sparse ignores __attribute__((packed)) when applied to an enum

while gcc honors this attribute. The result is that
sizeof(struct fcoe_rcv_info) is 48 when the header include/scsi/fc_frame.h is
compiled with gcc and that sizeof(struct fcoe_rcv_info) > 48 when the same
header is compiled by sparse. As a result, compilation with sparse fails due
to the BUILD_BUG_ON() statement in the function fcoe_dev_from_skb(), even
when checking a vanilla Linux kernel with sparse. The patch below slightly
modifies include/scsi/fc_frame.h such that gcc and sparse interpret this header
in the same way.

Note: it is fine to revert this patch once the behavior of gcc and sparse is
again in sync.


git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@1767 d57e44dd-8a1f-0410-8b47-8ef2f437770f
This commit is contained in:
Bart Van Assche
2010-06-13 17:34:40 +00:00
parent 56538f02d5
commit d8392af840
3 changed files with 15 additions and 0 deletions

View File

@@ -0,0 +1,13 @@
--- a/include/scsi/fc_frame.h 2010-06-13 11:08:26.000000000 +0200
+++ b/include/scsi/fc_frame.h 2010-06-13 11:08:53.000000000 +0200
@@ -66,8 +66,8 @@ struct fcoe_rcv_info {
struct fc_fcp_pkt *fr_fsp; /* for the corresponding fcp I/O */
u32 fr_crc;
u16 fr_max_payload; /* max FC payload */
- enum fc_sof fr_sof; /* start of frame delimiter */
- enum fc_eof fr_eof; /* end of frame delimiter */
+ u8 fr_sof; /* start of frame delimiter */
+ u8 fr_eof; /* end of frame delimiter */
u8 fr_flags; /* flags - see below */
u8 granted_mac[ETH_ALEN]; /* FCoE MAC address */
};

View File

@@ -12,3 +12,4 @@
11-ptp-flogi-recv
12-ptp-npiv
13-ptp-acc
14-fc-frame-sparse-workaround

View File

@@ -12,3 +12,4 @@
11-ptp-flogi-recv
12-ptp-npiv
13-ptp-acc
14-fc-frame-sparse-workaround