* [PATCH] tg3: fix ipv6 header length computation
@ 2012-01-23 11:22 Eric Dumazet
2012-01-23 19:25 ` David Miller
0 siblings, 1 reply; 2+ messages in thread
From: Eric Dumazet @ 2012-01-23 11:22 UTC (permalink / raw)
To: Matt Carlson; +Cc: Michael Chan, netdev
tg3_start_xmit() makes the wrong assumption for TSOV6 that skb->head
doesnt include any payload data.
if (skb_is_gso_v6(skb))
hdr_len = skb_headlen(skb) - ETH_HLEN;
This is not true anymore after commit f07d960df3 (tcp: avoid frag
allocation for small frames)
We should instead use : skb_transport_offset(skb) + tcp_hdrlen(skb)
Its also true for IPv4
Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com>
CC: Matt Carlson <mcarlson@broadcom.com>
CC: Michael Chan <mchan@broadcom.com>
---
I dont have a compatable hardware (5755_PLUS ?) so please guys test
this...
drivers/net/ethernet/broadcom/tg3.c | 9 ++-------
1 file changed, 2 insertions(+), 7 deletions(-)
diff --git a/drivers/net/ethernet/broadcom/tg3.c b/drivers/net/ethernet/broadcom/tg3.c
index d529af9..a1f2e0f 100644
--- a/drivers/net/ethernet/broadcom/tg3.c
+++ b/drivers/net/ethernet/broadcom/tg3.c
@@ -6667,14 +6667,9 @@ static netdev_tx_t tg3_start_xmit(struct sk_buff *skb, struct net_device *dev)
iph = ip_hdr(skb);
tcp_opt_len = tcp_optlen(skb);
- if (skb_is_gso_v6(skb)) {
- hdr_len = skb_headlen(skb) - ETH_HLEN;
- } else {
- u32 ip_tcp_len;
-
- ip_tcp_len = ip_hdrlen(skb) + sizeof(struct tcphdr);
- hdr_len = ip_tcp_len + tcp_opt_len;
+ hdr_len = skb_transport_offset(skb) + tcp_hdrlen(skb) - ETH_HLEN;
+ if (!skb_is_gso_v6(skb)) {
iph->check = 0;
iph->tot_len = htons(mss + hdr_len);
}
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH] tg3: fix ipv6 header length computation
2012-01-23 11:22 [PATCH] tg3: fix ipv6 header length computation Eric Dumazet
@ 2012-01-23 19:25 ` David Miller
0 siblings, 0 replies; 2+ messages in thread
From: David Miller @ 2012-01-23 19:25 UTC (permalink / raw)
To: eric.dumazet; +Cc: mcarlson, mchan, netdev
From: Eric Dumazet <eric.dumazet@gmail.com>
Date: Mon, 23 Jan 2012 12:22:09 +0100
> tg3_start_xmit() makes the wrong assumption for TSOV6 that skb->head
> doesnt include any payload data.
>
> if (skb_is_gso_v6(skb))
> hdr_len = skb_headlen(skb) - ETH_HLEN;
>
> This is not true anymore after commit f07d960df3 (tcp: avoid frag
> allocation for small frames)
>
> We should instead use : skb_transport_offset(skb) + tcp_hdrlen(skb)
>
> Its also true for IPv4
>
> Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com>
> CC: Matt Carlson <mcarlson@broadcom.com>
> CC: Michael Chan <mchan@broadcom.com>
> ---
> I dont have a compatable hardware (5755_PLUS ?) so please guys test
> this...
I've applied this, if testing finds problems we can fix it up or revert.
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2012-01-23 19:25 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-01-23 11:22 [PATCH] tg3: fix ipv6 header length computation Eric Dumazet
2012-01-23 19:25 ` David Miller
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).