Re: [PATCH v2] ipv6: Don't depend on per socket memory for neighbour discovery messages

Thomas Graf
2013-09-03T12:32:54Z

On 09/03/13 at 01:56pm, Hannes Frederic Sowa wrote:
> Hi!
>
> On Tue, Sep 03, 2013 at 01:37:01PM +0200, Thomas Graf wrote:
> > @@ -389,6 +386,11 @@ static struct sk_buff *ndisc_alloc_skb(struct net_device *dev,
> > skb_reserve(skb, hlen + sizeof(struct ipv6hdr));
> > skb_reset_transport_header(skb);
> >
> > + /* Manually assign socket ownership as we avoid calling
> > + * sock_alloc_send_pskb() to bypass wmem buffer limits
> > + */
> > + skb_set_owner_w(skb, sk);
> > +
> > return skb;
> > }
>
> Do you know why this is needed? From the report it seemed to me that we might
> have a deadlock on idev->lock and I couldn't find the culprit.
>
> When I tested your change on x86_64 I did not experience this.

I also didn't see any problems running v1 of the patch which
is confusing as the IPv6 output path assumes a socket reference
in various places as Dave pointed out correctly.

I don't see why the problem would be limited to ARM.

> Maybe someone with arm could try this patch with CONFIG_PROVE_LOCKING?

I would certainly welcome that.