Commit 4c5bc740 authored by Kumar Sundararajan's avatar Kumar Sundararajan Committed by Ben Hutchings

ipv6: fib: fix fib dump restart

commit 1c265854 upstream.

When the ipv6 fib changes during a table dump, the walk is
restarted and the number of nodes dumped are skipped. But the existing
code doesn't advance to the next node after a node is skipped. This can
cause the dump to loop or produce lots of duplicates when the fib
is modified during the dump.

This change advances the walk to the next node if the current node is
skipped after a restart.
Signed-off-by: default avatarKumar Sundararajan <kumar@fb.com>
Signed-off-by: default avatarChris Mason <clm@fb.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
Signed-off-by: default avatarBen Hutchings <ben@decadent.org.uk>
parent ee558c90
...@@ -1278,7 +1278,7 @@ static int fib6_walk_continue(struct fib6_walker_t *w) ...@@ -1278,7 +1278,7 @@ static int fib6_walk_continue(struct fib6_walker_t *w)
if (w->skip) { if (w->skip) {
w->skip--; w->skip--;
continue; goto skip;
} }
err = w->func(w); err = w->func(w);
...@@ -1288,6 +1288,7 @@ static int fib6_walk_continue(struct fib6_walker_t *w) ...@@ -1288,6 +1288,7 @@ static int fib6_walk_continue(struct fib6_walker_t *w)
w->count++; w->count++;
continue; continue;
} }
skip:
w->state = FWS_U; w->state = FWS_U;
case FWS_U: case FWS_U:
if (fn == w->root) if (fn == w->root)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment