net: core: don't account for udp header size when computing seglen
[firefly-linux-kernel-4.4.55.git] / net / core / neighbour.c
index e16129019c6658ae7b1ab697692f8e6484c8cd90..8f8a96ef9f3f64ba519fe4c872d46c7b7c680ec9 100644 (file)
@@ -836,10 +836,10 @@ out:
 static __inline__ int neigh_max_probes(struct neighbour *n)
 {
        struct neigh_parms *p = n->parms;
-       return (n->nud_state & NUD_PROBE) ?
-               NEIGH_VAR(p, UCAST_PROBES) :
-               NEIGH_VAR(p, UCAST_PROBES) + NEIGH_VAR(p, APP_PROBES) +
-               NEIGH_VAR(p, MCAST_PROBES);
+       int max_probes = NEIGH_VAR(p, UCAST_PROBES) + NEIGH_VAR(p, APP_PROBES);
+       if (!(n->nud_state & NUD_PROBE))
+               max_probes += NEIGH_VAR(p, MCAST_PROBES);
+       return max_probes;
 }
 
 static void neigh_invalidate(struct neighbour *neigh)
@@ -945,6 +945,7 @@ static void neigh_timer_handler(unsigned long arg)
                neigh->nud_state = NUD_FAILED;
                notify = 1;
                neigh_invalidate(neigh);
+               goto out;
        }
 
        if (neigh->nud_state & NUD_IN_TIMER) {