On Sun, 2013-12-08 at 16:30 +0200, Mike Rapoport wrote: > > It was something *very* hacky: > if (skb->len < 64000) > skb_shinfo(skb)->gso_size = skb->len; > else > skb_shinfo(skb)->gso_size = 64000; This sounds like an 16bit overflow somewhere. This reminds the issue we fix in commit 50bceae9bd356 ("tcp: Reallocate headroom if it would overflow csum_start") You might try to reduce the 0xFFFF to something smaller. diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c index 993da005e087..8364bcfe1e08 100644 --- a/net/ipv4/tcp_output.c +++ b/net/ipv4/tcp_output.c @@ -2373,7 +2373,7 @@ int __tcp_retransmit_skb(struct sock *sk, struct sk_buff *skb) * beyond what csum_start can cover. */ if (unlikely((NET_IP_ALIGN && ((unsigned long)skb->data & 3)) || - skb_headroom(skb) >= 0xFFFF)) { + skb_headroom(skb) >= 0xFF00)) { struct sk_buff *nskb = __pskb_copy(skb, MAX_TCP_HEADER, GFP_ATOMIC); return nskb ? tcp_transmit_skb(sk, nskb, 0, GFP_ATOMIC) : -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html