Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 758a7f0b authored by David Ahern's avatar David Ahern Committed by David S. Miller
Browse files

neighbor: Fix state check in neigh_forced_gc



PERMANENT entries are not on the gc_list so the state check is now
redundant. Also, the move to not purge entries until after 5 seconds
should not apply to FAILED entries; those can be removed immediately
to make way for newer ones. This restores the previous logic prior to
the gc_list.

Fixes: 58956317 ("neighbor: Improve garbage collection")
Signed-off-by: default avatarDavid Ahern <dsahern@gmail.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 9c29a2f5
Loading
Loading
Loading
Loading
+2 −3
Original line number Diff line number Diff line
@@ -204,7 +204,6 @@ static int neigh_forced_gc(struct neigh_table *tbl)
	unsigned long tref = jiffies - 5 * HZ;
	u8 flags = NTF_EXT_LEARNED;
	struct neighbour *n, *tmp;
	u8 state = NUD_PERMANENT;
	int shrunk = 0;

	NEIGH_CACHE_STAT_INC(tbl, forced_gc_runs);
@@ -216,8 +215,8 @@ static int neigh_forced_gc(struct neigh_table *tbl)
			bool remove = false;

			write_lock(&n->lock);
			if (!(n->nud_state & state) && !(n->flags & flags) &&
			    time_after(tref, n->updated))
			if ((n->nud_state == NUD_FAILED) ||
			    (!(n->flags & flags) && time_after(tref, n->updated)))
				remove = true;
			write_unlock(&n->lock);