Message ID | 1289519279-20641-2-git-send-email-jesse@nicira.com |
---|---|
State | Accepted, archived |
Delegated to: | David Miller |
Headers | show |
From: Jesse Gross <jesse@nicira.com> Date: Thu, 11 Nov 2010 15:47:58 -0800 > From: Hao Zheng <hzheng@nicira.com> > > Currently the skb->protocol field is used to setup checksum > offloading on transmit for the correct protocol. However, if > vlan offloading is disabled or otherwise not used, the protocol > field will be ETH_P_8021Q, not the actual protocol. This will > cause the checksum to be not computed correctly, even though the > hardware is capable of looking inside vlan tags. Instead, > look inside the header if necessary to determine the correct > protocol type. > > To some extent this fixes a regression from 2.6.36 because it > was previously not possible to disable vlan offloading and this > error case was not exposed. > > Signed-off-by: Hao Zheng <hzheng@nicira.com> > CC: Eilon Greenstein <eilong@broadcom.com> > Signed-off-by: Jesse Gross <jesse@nicira.com> Applied. -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/drivers/net/bnx2x/bnx2x_cmn.c b/drivers/net/bnx2x/bnx2x_cmn.c index 459614d..94d5f59 100644 --- a/drivers/net/bnx2x/bnx2x_cmn.c +++ b/drivers/net/bnx2x/bnx2x_cmn.c @@ -1680,7 +1680,7 @@ static inline u32 bnx2x_xmit_type(struct bnx2x *bp, struct sk_buff *skb) rc = XMIT_PLAIN; else { - if (skb->protocol == htons(ETH_P_IPV6)) { + if (vlan_get_protocol(skb) == htons(ETH_P_IPV6)) { rc = XMIT_CSUM_V6; if (ipv6_hdr(skb)->nexthdr == IPPROTO_TCP) rc |= XMIT_CSUM_TCP;