diff mbox

ipv6: fib: fix fib dump restart

Message ID 53591645.7010609@fb.com
State Accepted, archived
Delegated to: David Miller
Headers show

Commit Message

Chris Mason April 24, 2014, 1:48 p.m. UTC
From: Kumar Sundararajan <kumar@fb.com>

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: Chris Mason <clm@fb.com>
---
 net/ipv6/ip6_fib.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

Comments

Eric Dumazet April 24, 2014, 2:18 p.m. UTC | #1
On Thu, 2014-04-24 at 09:48 -0400, Chris Mason wrote:
> From: Kumar Sundararajan <kumar@fb.com>
> 
> 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: Chris Mason <clm@fb.com>
> ---
>  net/ipv6/ip6_fib.c | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)

Hi Chris

Who wrote the patch exactly ?

If Kumar did, you need to put the
"Signed-off-by: Kumar Sundararajan <kumar@fb.com>" before your own




--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Chris Mason April 24, 2014, 2:43 p.m. UTC | #2
On 04/24/2014 10:18 AM, Eric Dumazet wrote:
> On Thu, 2014-04-24 at 09:48 -0400, Chris Mason wrote:
>> From: Kumar Sundararajan <kumar@fb.com>
>>
>> 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: Chris Mason <clm@fb.com>
>> ---
>>   net/ipv6/ip6_fib.c | 3 ++-
>>   1 file changed, 2 insertions(+), 1 deletion(-)
>
> Hi Chris
>
> Who wrote the patch exactly ?
>
> If Kumar did, you need to put the
> "Signed-off-by: Kumar Sundararajan <kumar@fb.com>" before your own

Kumar did write it, I'll grab a sob from him.

-chris

--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Chris Mason April 24, 2014, 8:26 p.m. UTC | #3
On 04/24/2014 09:48 AM, Chris Mason wrote:
>
> From: Kumar Sundararajan <kumar@fb.com>
>
> 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.
>

Not sure if patchwork will do the right thing, but adding Kumar's 
signed-off-by:

Signed-off-by: Kumar Sundararajan <kumar@fb.com>

-chris
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
David Miller April 24, 2014, 8:31 p.m. UTC | #4
From: Chris Mason <clm@fb.com>
Date: Thu, 24 Apr 2014 16:26:12 -0400

> On 04/24/2014 09:48 AM, Chris Mason wrote:
>>
>> From: Kumar Sundararajan <kumar@fb.com>
>>
>> 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.
>>
> 
> Not sure if patchwork will do the right thing, but adding Kumar's
> signed-off-by:

I just checked, it does do the right thing, just FYI.
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
David Miller April 24, 2014, 9:20 p.m. UTC | #5
From: Chris Mason <clm@fb.com>
Date: Thu, 24 Apr 2014 09:48:53 -0400

> 
> From: Kumar Sundararajan <kumar@fb.com>
> 
> 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: Chris Mason <clm@fb.com>

Applied and queue up for -stable, thanks.
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/net/ipv6/ip6_fib.c b/net/ipv6/ip6_fib.c
index 34e0ded..87891f5 100644
--- a/net/ipv6/ip6_fib.c
+++ b/net/ipv6/ip6_fib.c
@@ -1459,7 +1459,7 @@  static int fib6_walk_continue(struct fib6_walker_t *w)
 
 				if (w->skip) {
 					w->skip--;
-					continue;
+					goto skip;
 				}
 
 				err = w->func(w);
@@ -1469,6 +1469,7 @@  static int fib6_walk_continue(struct fib6_walker_t *w)
 				w->count++;
 				continue;
 			}
+skip:
 			w->state = FWS_U;
 		case FWS_U:
 			if (fn == w->root)