瀏覽代碼

neighbour: force neigh_invalidate when NUD_FAILED update is from admin

In systems where neigh gc thresh holds are set to high values,
admin deleted neigh entries (eg ip neigh flush or ip neigh del) can
linger around in NUD_FAILED state for a long time until periodic gc kicks
in. This patch forces neigh_invalidate when NUD_FAILED neigh_update is
from an admin.

Signed-off-by: Roopa Prabhu <roopa@cumulusnetworks.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Roopa Prabhu 7 年之前
父節點
當前提交
8e326289e3
共有 1 個文件被更改,包括 2 次插入1 次删除
  1. 2 1
      net/core/neighbour.c

+ 2 - 1
net/core/neighbour.c

@@ -1148,7 +1148,8 @@ int neigh_update(struct neighbour *neigh, const u8 *lladdr, u8 new,
 		neigh->nud_state = new;
 		neigh->nud_state = new;
 		err = 0;
 		err = 0;
 		notify = old & NUD_VALID;
 		notify = old & NUD_VALID;
-		if ((old & (NUD_INCOMPLETE | NUD_PROBE)) &&
+		if (((old & (NUD_INCOMPLETE | NUD_PROBE)) ||
+		     (flags & NEIGH_UPDATE_F_ADMIN)) &&
 		    (new & NUD_FAILED)) {
 		    (new & NUD_FAILED)) {
 			neigh_invalidate(neigh);
 			neigh_invalidate(neigh);
 			notify = 1;
 			notify = 1;