diff --git a/net/core/neighbour.c b/net/core/neighbour.c
index 0a68045782d18a635d8071a8ce673f4d1dd95379..603b4036ff02d1280a7b94ebb1945eaae2eee271 100644
--- a/net/core/neighbour.c
+++ b/net/core/neighbour.c
@@ -935,6 +935,7 @@ static void neigh_timer_handler(unsigned long arg)
 			neigh->nud_state = NUD_PROBE;
 			neigh->updated = jiffies;
 			atomic_set(&neigh->probes, 0);
+			notify = 1;
 			next = now + neigh->parms->retrans_time;
 		}
 	} else {
@@ -1162,6 +1163,8 @@ int neigh_update(struct neighbour *neigh, const u8 *lladdr, u8 new,
 
 	if (new != old) {
 		neigh_del_timer(neigh);
+		if (new & NUD_PROBE)
+			atomic_set(&neigh->probes, 0);
 		if (new & NUD_IN_TIMER)
 			neigh_add_timer(neigh, (jiffies +
 						((new & NUD_REACHABLE) ?