summaryrefslogtreecommitdiff
path: root/net/core/dev.c
diff options
context:
space:
mode:
authorHerbert Xu <herbert@gondor.apana.org.au>2009-05-26 18:50:23 +0000
committerDavid S. Miller <davem@davemloft.net>2009-05-27 03:25:57 -0700
commit78d3fd0b7de844a6dad56e9620fc9d2271b32ab9 (patch)
treee79c910646deccc50f5a108782f66cebffafa4d8 /net/core/dev.c
parent67147ba99aeb48f2863e03b68e090088a34c1b5d (diff)
downloadlwn-78d3fd0b7de844a6dad56e9620fc9d2271b32ab9.tar.gz
lwn-78d3fd0b7de844a6dad56e9620fc9d2271b32ab9.zip
gro: Only use skb_gro_header for completely non-linear packets
Currently skb_gro_header is used for packets which put the hardware header in skb->data with the rest in frags. Since the drivers that need this optimisation all provide completely non-linear packets, we can gain extra optimisations by only performing the frag0 optimisation for completely non-linear packets. In particular, we can simply test frag0 (instead of skb_headlen) to see whether the optimisation is in force. Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/core/dev.c')
-rw-r--r--net/core/dev.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/net/core/dev.c b/net/core/dev.c
index bdb1a738193d..f9d90c56b6f0 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -2510,7 +2510,8 @@ void skb_gro_reset_offset(struct sk_buff *skb)
NAPI_GRO_CB(skb)->data_offset = 0;
NAPI_GRO_CB(skb)->frag0 = NULL;
- if (!skb_headlen(skb) && !PageHighMem(skb_shinfo(skb)->frags[0].page))
+ if (skb->mac_header == skb->tail &&
+ !PageHighMem(skb_shinfo(skb)->frags[0].page))
NAPI_GRO_CB(skb)->frag0 =
page_address(skb_shinfo(skb)->frags[0].page) +
skb_shinfo(skb)->frags[0].page_offset;