summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHerbert Xu <herbert@gondor.apana.org.au>2009-01-14 14:36:12 -0800
committerDavid S. Miller <davem@davemloft.net>2009-01-14 14:36:12 -0800
commitf17f5c91ae3bfeb5cfc37fa132a5fdfceb8927be (patch)
treeba4c4b7c9d71bf15d9e2ceaeebbea8823bb5f120
parent483a2b3a3182abcb7fcea986d7ea13e793bb00b1 (diff)
downloadlwn-f17f5c91ae3bfeb5cfc37fa132a5fdfceb8927be.tar.gz
lwn-f17f5c91ae3bfeb5cfc37fa132a5fdfceb8927be.zip
gro: Check for GSO packets and packets with frag_list
As GRO cannot be applied to packets with frag_list we need to make sure that we reject such packets if they are fed to us, e.g., through a tunnel device. Also there is no point in applying GRO on GSO packets so they too should be rejected. This allows GRO to be used in virtio-net which may produce GSO packets directly but may still benefit from GRO if the other end of it doesn't support GSO. Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--net/core/dev.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/net/core/dev.c b/net/core/dev.c
index b715a55cccc4..7dec715293b1 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -2392,6 +2392,9 @@ int dev_gro_receive(struct napi_struct *napi, struct sk_buff *skb)
if (!(skb->dev->features & NETIF_F_GRO))
goto normal;
+ if (skb_is_gso(skb) || skb_shinfo(skb)->frag_list)
+ goto normal;
+
rcu_read_lock();
list_for_each_entry_rcu(ptype, head, list) {
struct sk_buff *p;