ipv6: Fix sporadic sendmsg -EINVAL when sending to multicast groups.
authorDavid S. Miller <davem@davemloft.net>
Mon, 5 Jan 2009 00:04:39 +0000 (16:04 -0800)
committerDavid S. Miller <davem@davemloft.net>
Mon, 5 Jan 2009 00:04:39 +0000 (16:04 -0800)
commit14deae41566b5cdd992c01d0069518ced5227c83
treed15c3dfabdc3ccf10997487c29df35fa58387e55
parenteb4dea5853046727bfbb579f0c9a8cae7369f7c6
ipv6: Fix sporadic sendmsg -EINVAL when sending to multicast groups.

Thanks to excellent diagnosis by Eduard Guzovsky.

The core problem is that on a network with lots of active
multicast traffic, the neighbour cache can fill up.  If
we try to allocate a new route and thus neighbour cache
entry, the bog-standard GC attempt the neighbour layer does
in ineffective because route entries hold a reference
to the existing neighbour entries and GC can only liberate
entries with no references.

IPV4 already has a way to handle this, by doing a route cache
GC in such situations (when neigh attach returns -ENOBUFS).

So simply mimick this on the ipv6 side.

Tested-by: Eduard Guzovsky <eguzovsky@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/net/ndisc.h
net/ipv6/route.c