diff options
author | Eric Dumazet <eric.dumazet@gmail.com> | 2011-10-13 07:20:08 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2011-10-13 22:28:29 -0400 |
commit | 96cd8951684adaa5fd72952adef532d0b42f70e1 (patch) | |
tree | 09729378bf804d8a8b077688de63136c8b09c512 /drivers/net/ethernet/faraday | |
parent | e7e5a4033f765e2a37095cd0a73261c99840f77e (diff) |
ftmac100: fix skb truesize underestimation
ftmac100 allocates a page per skb fragment. We must account
PAGE_SIZE increments on skb->truesize, not the actual frag length.
If frame is under 64 bytes, page is freed, so increase truesize only for
bigger frames.
Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com>
CC: Po-Yu Chuang <ratbert@faraday-tech.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ethernet/faraday')
-rw-r--r-- | drivers/net/ethernet/faraday/ftmac100.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/drivers/net/ethernet/faraday/ftmac100.c b/drivers/net/ethernet/faraday/ftmac100.c index 9bd7746cbfcf..a127cb2476c7 100644 --- a/drivers/net/ethernet/faraday/ftmac100.c +++ b/drivers/net/ethernet/faraday/ftmac100.c | |||
@@ -439,7 +439,10 @@ static bool ftmac100_rx_packet(struct ftmac100 *priv, int *processed) | |||
439 | skb_fill_page_desc(skb, 0, page, 0, length); | 439 | skb_fill_page_desc(skb, 0, page, 0, length); |
440 | skb->len += length; | 440 | skb->len += length; |
441 | skb->data_len += length; | 441 | skb->data_len += length; |
442 | skb->truesize += length; | 442 | |
443 | /* page might be freed in __pskb_pull_tail() */ | ||
444 | if (length > 64) | ||
445 | skb->truesize += PAGE_SIZE; | ||
443 | __pskb_pull_tail(skb, min(length, 64)); | 446 | __pskb_pull_tail(skb, min(length, 64)); |
444 | 447 | ||
445 | ftmac100_alloc_rx_page(priv, rxdes, GFP_ATOMIC); | 448 | ftmac100_alloc_rx_page(priv, rxdes, GFP_ATOMIC); |