]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
Revert "ipv6: Don't depend on per socket memory for neighbour discovery messages"
authorDavid S. Miller <davem@davemloft.net>
Fri, 30 Aug 2013 21:39:33 +0000 (17:39 -0400)
committerDavid S. Miller <davem@davemloft.net>
Fri, 30 Aug 2013 21:39:33 +0000 (17:39 -0400)
This reverts commit 1f324e38870cc09659cf23bc626f1b8869e201f2.

It seems to cause regressions, and in particular the output path
really depends upon there being a socket attached to skb->sk for
checks such as sk_mc_loop(skb->sk) for example.  See ip6_output_finish2().

Reported-by: Stephen Warren <swarren@wwwdotorg.org>
Reported-by: Fabio Estevam <festevam@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/ipv6/ndisc.c

index 5cb98df966c29c3bc0ff69f8b74d228786f9f1df..04d31c2fbef1ede543bbc4942873722f66a9b524 100644 (file)
@@ -370,12 +370,16 @@ static struct sk_buff *ndisc_alloc_skb(struct net_device *dev,
 {
        int hlen = LL_RESERVED_SPACE(dev);
        int tlen = dev->needed_tailroom;
+       struct sock *sk = dev_net(dev)->ipv6.ndisc_sk;
        struct sk_buff *skb;
+       int err;
 
-       skb = alloc_skb(hlen + sizeof(struct ipv6hdr) + len + tlen, GFP_ATOMIC);
+       skb = sock_alloc_send_skb(sk,
+                                 hlen + sizeof(struct ipv6hdr) + len + tlen,
+                                 1, &err);
        if (!skb) {
-               ND_PRINTK(0, err, "ndisc: %s failed to allocate an skb\n",
-                         __func__);
+               ND_PRINTK(0, err, "ndisc: %s failed to allocate an skb, err=%d\n",
+                         __func__, err);
                return NULL;
        }