gro: Do not merge paged packets into frag_list
gro: Do not merge paged packets into frag_list Bigger is not always better :) It was easy to continue to merged packets into frag_list after the page array is full. However, this turns out to be worse than LRO because frag_list is a much less efficient form of storage than the page array. So we're better off stopping the merge and starting a new entry with an empty page array. In future we can optimise this further by doing frag_list merging but making sure that we continue to fill in the page array. Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
86911732d3
commit
81705ad1b2
1 changed files with 5 additions and 3 deletions
|
@ -2591,9 +2591,11 @@ int skb_gro_receive(struct sk_buff **head, struct sk_buff *skb)
|
|||
|
||||
if (skb_shinfo(p)->frag_list)
|
||||
goto merge;
|
||||
else if (skb_headlen(skb) <= skb_gro_offset(skb) &&
|
||||
skb_shinfo(p)->nr_frags + skb_shinfo(skb)->nr_frags <=
|
||||
MAX_SKB_FRAGS) {
|
||||
else if (skb_headlen(skb) <= skb_gro_offset(skb)) {
|
||||
if (skb_shinfo(p)->nr_frags + skb_shinfo(skb)->nr_frags >
|
||||
MAX_SKB_FRAGS)
|
||||
return -E2BIG;
|
||||
|
||||
skb_shinfo(skb)->frags[0].page_offset +=
|
||||
skb_gro_offset(skb) - skb_headlen(skb);
|
||||
skb_shinfo(skb)->frags[0].size -=
|
||||
|
|
Loading…
Reference in a new issue