net: use skb_clone to avoid alloc_pages failure.
authorMartin Zhang <martinbj2008@gmail.com>
Tue, 17 Nov 2015 12:49:30 +0000 (20:49 +0800)
committerDavid S. Miller <davem@davemloft.net>
Tue, 17 Nov 2015 20:25:44 +0000 (15:25 -0500)
1. new skb only need dst and ip address(v4 or v6).
2. skb_copy may need high order pages, which is very rare on long running server.

Signed-off-by: Junwei Zhang <linggao.zjw@alibaba-inc.com>
Signed-off-by: Martin Zhang <martinbj2008@gmail.com>
Acked-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/core/neighbour.c

index 1aa8437ed6c4437d196ad513f0d3619198914416..e6af42da28d9552643751a1af7dfcd96cad05c3d 100644 (file)
@@ -857,7 +857,7 @@ static void neigh_probe(struct neighbour *neigh)
        struct sk_buff *skb = skb_peek_tail(&neigh->arp_queue);
        /* keep skb alive even if arp_queue overflows */
        if (skb)
-               skb = skb_copy(skb, GFP_ATOMIC);
+               skb = skb_clone(skb, GFP_ATOMIC);
        write_unlock(&neigh->lock);
        neigh->ops->solicit(neigh, skb);
        atomic_inc(&neigh->probes);