]> pilppa.com Git - linux-2.6-omap-h63xx.git/commitdiff
gso: Fix support for linear packets
authorHerbert Xu <herbert@gondor.apana.org.au>
Sun, 29 Mar 2009 06:39:18 +0000 (23:39 -0700)
committerDavid S. Miller <davem@davemloft.net>
Sun, 29 Mar 2009 06:39:18 +0000 (23:39 -0700)
When GRO/frag_list support was added to GSO, I made an error
which broke the support for segmenting linear GSO packets (GSO
packets are normally non-linear in the payload).

These days most of these packets are constructed by the tun
driver, which prefers to allocate linear memory if possible.
This is fixed in the latest kernel, but for 2.6.29 and earlier
it is still the norm.

Therefore this bug causes failures with GSO when used with tun
in 2.6.29.

Reported-by: James Huang <jamesclhuang@gmail.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/core/skbuff.c

index 6acbf9e79eb1dc2076bc192f774c8b5591566c42..ce6356cd9f71c76bad3cf9a0ec5fbb774c0a427a 100644 (file)
@@ -2579,7 +2579,7 @@ struct sk_buff *skb_segment(struct sk_buff *skb, int features)
                                          skb_network_header_len(skb));
                skb_copy_from_linear_data(skb, nskb->data, doffset);
 
-               if (pos >= offset + len)
+               if (fskb != skb_shinfo(skb)->frag_list)
                        continue;
 
                if (!sg) {