ftmac100: fix skb truesize underestimation
authorEric Dumazet <eric.dumazet@gmail.com>
Thu, 13 Oct 2011 11:20:08 +0000 (11:20 +0000)
committerDavid S. Miller <davem@davemloft.net>
Fri, 14 Oct 2011 02:28:29 +0000 (22:28 -0400)
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>
drivers/net/ethernet/faraday/ftmac100.c

index 9bd7746cbfcfd1fc6b294cbdb2f499e7f21d5e96..a127cb2476c71ff89f0e343134421ada4b52911e 100644 (file)
@@ -439,7 +439,10 @@ static bool ftmac100_rx_packet(struct ftmac100 *priv, int *processed)
        skb_fill_page_desc(skb, 0, page, 0, length);
        skb->len += length;
        skb->data_len += length;
-       skb->truesize += length;
+
+       /* page might be freed in __pskb_pull_tail() */
+       if (length > 64)
+               skb->truesize += PAGE_SIZE;
        __pskb_pull_tail(skb, min(length, 64));
 
        ftmac100_alloc_rx_page(priv, rxdes, GFP_ATOMIC);