net: ftgmac100/ftmac100: dont pull too much data
Drivers should pull only ethernet header from page frag to skb->head. Pulling 64 bytes is too much for TCP (without options) on IPv4. However, it makes sense to pull all the frame if it fits the 128 bytes bloc allocated for skb->head, to free one page per small incoming frame. Signed-off-by: Eric Dumazet <edumazet@google.com> Cc: Po-Yu Chuang <ratbert@faraday-tech.com> Acked-by: Yan-Pai Chen <yanpai.chen@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

parent
db8dacf953
commit
6ecd09dd35
@@ -479,9 +479,14 @@ static bool ftgmac100_rx_packet(struct ftgmac100 *priv, int *processed)
|
||||
rxdes = ftgmac100_current_rxdes(priv);
|
||||
} while (!done);
|
||||
|
||||
if (skb->len <= 64)
|
||||
/* Small frames are copied into linear part of skb to free one page */
|
||||
if (skb->len <= 128) {
|
||||
skb->truesize -= PAGE_SIZE;
|
||||
__pskb_pull_tail(skb, min(skb->len, 64U));
|
||||
__pskb_pull_tail(skb, skb->len);
|
||||
} else {
|
||||
/* We pull the minimum amount into linear part */
|
||||
__pskb_pull_tail(skb, ETH_HLEN);
|
||||
}
|
||||
skb->protocol = eth_type_trans(skb, netdev);
|
||||
|
||||
netdev->stats.rx_packets++;
|
||||
|
Reference in New Issue
Block a user