diff options
author | Eric Dumazet <edumazet@google.com> | 2012-04-30 04:10:34 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2012-04-30 21:35:49 -0400 |
commit | d7e8883cfcf4851afe74fb380cc62b7fa9cf66ba (patch) | |
tree | 1b513349c4f1c7edf7991de2016b3a2ed1083deb /net/core/dev.c | |
parent | 8d4057a938481351dc690fbe23e8c72af08d5890 (diff) |
net: make GRO aware of skb->head_frag
GRO can check if skb to be merged has its skb->head mapped to a page
fragment, instead of a kmalloc() area.
We 'upgrade' skb->head as a fragment in itself
This avoids the frag_list fallback, and permits to build true GRO skb
(one sk_buff and up to 16 fragments), using less memory.
This reduces number of cache misses when user makes its copy, since a
single sk_buff is fetched.
This is a followup of patch "net: allow skb->head to be a page fragment"
Signed-off-by: Eric Dumazet <edumazet@google.com>
Cc: Ilpo Järvinen <ilpo.jarvinen@helsinki.fi>
Cc: Herbert Xu <herbert@gondor.apana.org.au>
Cc: Maciej Żenczykowski <maze@google.com>
Cc: Neal Cardwell <ncardwell@google.com>
Cc: Tom Herbert <therbert@google.com>
Cc: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Cc: Ben Hutchings <bhutchings@solarflare.com>
Cc: Matt Carlson <mcarlson@broadcom.com>
Cc: Michael Chan <mchan@broadcom.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/core/dev.c')
-rw-r--r-- | net/core/dev.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/net/core/dev.c b/net/core/dev.c index 501f3cc703dd..a2be59fe6ab8 100644 --- a/net/core/dev.c +++ b/net/core/dev.c | |||
@@ -3546,7 +3546,10 @@ gro_result_t napi_skb_finish(gro_result_t ret, struct sk_buff *skb) | |||
3546 | break; | 3546 | break; |
3547 | 3547 | ||
3548 | case GRO_MERGED_FREE: | 3548 | case GRO_MERGED_FREE: |
3549 | consume_skb(skb); | 3549 | if (NAPI_GRO_CB(skb)->free == NAPI_GRO_FREE_STOLEN_HEAD) |
3550 | kmem_cache_free(skbuff_head_cache, skb); | ||
3551 | else | ||
3552 | __kfree_skb(skb); | ||
3550 | break; | 3553 | break; |
3551 | 3554 | ||
3552 | case GRO_HELD: | 3555 | case GRO_HELD: |