[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <7ebe8ec1-c407-d907-e99a-adcd89a8e16b@compton.nu>
Date: Thu, 2 May 2019 13:42:40 +0100
From: Tom Hughes <tom@...pton.nu>
To: David Ahern <dsahern@...il.com>
Cc: netdev@...r.kernel.org
Subject: ndisc_cache garbage collection issue
I recently upgraded a machine from a 4.20.13 kernel to 5.0.9 and am
finding that after a few days I start getting a lot of these messages:
neighbour: ndisc_cache: neighbor table overflow!
and IPv6 networking starts to fail intermittently as a result.
The neighbour table doesn't appear to have much in it however so I've
been looking at the code, and especially your recent changes to garbage
collection in the neighbour tables and my working theory is that the
value of gc_entries is somehow out of sync with the actual list of what
needs to be garbage collected.
Looking at the code I think I see a possible way that this could be
happening post 8cc196d6ef8 which moved the addition of new entries to
the gc list out of neigh_alloc into ___neigh_create.
The problem is that neigh_alloc is doing the increment of gc_entries, so
if ___neigh_create winds up taking an error path gc_entries will have
been incremented but the neighbour will never be added to the gc list.
I don't know for sure yet that this is the cause of my problem, but it
seems to be incorrect in any case unless I have misunderstood something?
Tom
--
Tom Hughes (tom@...pton.nu)
http://compton.nu/
Powered by blists - more mailing lists