[PATCH] net: fib: fix incorrect call_rcu_bh()

Subsystems: networking [general], networking [ipv4/ipv6], the rest

STALE5110d

5 messages, 3 authors, 2012-08-08 · open the first message on its own page

[PATCH] net: fib: fix incorrect call_rcu_bh()

From: Eric Dumazet <hidden>
Date: 2012-08-07 10:47:16

From: Eric Dumazet <edumazet@google.com>

After IP route cache removal, I believe rcu_bh() has very little use and
we should remove this RCU variant, since it adds some cycles in fast
path.

Anyway, the call_rcu_bh() use in fib_true is obviously wrong, since
some users only assert rcu_read_lock().

Signed-off-by: Eric Dumazet <edumazet@google.com>
Cc: "Paul E. McKenney" <redacted>
---
 net/ipv4/fib_trie.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/net/ipv4/fib_trie.c b/net/ipv4/fib_trie.c
index f0cdb30..57bd978 100644
--- a/net/ipv4/fib_trie.c
+++ b/net/ipv4/fib_trie.c
@@ -367,7 +367,7 @@ static void __leaf_free_rcu(struct rcu_head *head)
 
 static inline void free_leaf(struct leaf *l)
 {
-	call_rcu_bh(&l->rcu, __leaf_free_rcu);
+	call_rcu(&l->rcu, __leaf_free_rcu);
 }
 
 static inline void free_leaf_info(struct leaf_info *leaf)

Re: [PATCH] net: fib: fix incorrect call_rcu_bh()

From: Eric Dumazet <hidden>
Date: 2012-08-07 16:48:19

On Tue, 2012-08-07 at 09:34 -0700, Paul E. McKenney wrote:
On Tue, Aug 07, 2012 at 12:47:11PM +0200, Eric Dumazet wrote:
quoted
From: Eric Dumazet <edumazet@google.com>

After IP route cache removal, I believe rcu_bh() has very little use and
we should remove this RCU variant, since it adds some cycles in fast
path.
Do you mean remove all uses of RCU-bh globally and also removing the
implementation itself?  That would actually be a good thing, from my
perspective.
Yes I meant that there are now too few rcu_bh users, and that they
probably could switch to regular rcu.

We could then remove the implementation.

rcu_bh was needed because we could sit forever in softirq mode in one
cpu, and we needed to allocate/free dsts with RCU protection.

Re: [PATCH] net: fib: fix incorrect call_rcu_bh()

From: Paul E. McKenney <hidden>
Date: 2012-08-07 16:52:18

On Tue, Aug 07, 2012 at 12:47:11PM +0200, Eric Dumazet wrote:
From: Eric Dumazet <edumazet@google.com>

After IP route cache removal, I believe rcu_bh() has very little use and
we should remove this RCU variant, since it adds some cycles in fast
path.
Do you mean remove all uses of RCU-bh globally and also removing the
implementation itself?  That would actually be a good thing, from my
perspective.

Or were you meaning something more localized?

							Thanx, Paul
quoted hunk
Anyway, the call_rcu_bh() use in fib_true is obviously wrong, since
some users only assert rcu_read_lock().

Signed-off-by: Eric Dumazet <edumazet@google.com>
Cc: "Paul E. McKenney" <redacted>
---
 net/ipv4/fib_trie.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/net/ipv4/fib_trie.c b/net/ipv4/fib_trie.c
index f0cdb30..57bd978 100644
--- a/net/ipv4/fib_trie.c
+++ b/net/ipv4/fib_trie.c
@@ -367,7 +367,7 @@ static void __leaf_free_rcu(struct rcu_head *head)

 static inline void free_leaf(struct leaf *l)
 {
-	call_rcu_bh(&l->rcu, __leaf_free_rcu);
+	call_rcu(&l->rcu, __leaf_free_rcu);
 }

 static inline void free_leaf_info(struct leaf_info *leaf)

Re: [PATCH] net: fib: fix incorrect call_rcu_bh()

From: Paul E. McKenney <hidden>
Date: 2012-08-07 17:28:34

On Tue, Aug 07, 2012 at 06:48:14PM +0200, Eric Dumazet wrote:
On Tue, 2012-08-07 at 09:34 -0700, Paul E. McKenney wrote:
quoted
On Tue, Aug 07, 2012 at 12:47:11PM +0200, Eric Dumazet wrote:
quoted
From: Eric Dumazet <edumazet@google.com>

After IP route cache removal, I believe rcu_bh() has very little use and
we should remove this RCU variant, since it adds some cycles in fast
path.
Do you mean remove all uses of RCU-bh globally and also removing the
implementation itself?  That would actually be a good thing, from my
perspective.
Yes I meant that there are now too few rcu_bh users, and that they
probably could switch to regular rcu.

We could then remove the implementation.

rcu_bh was needed because we could sit forever in softirq mode in one
cpu, and we needed to allocate/free dsts with RCU protection.
Very cool!!!  Anything I can do to help, aside of course from the final
removal of RCU-bh support?

							Thanx, Paul

Re: [PATCH] net: fib: fix incorrect call_rcu_bh()

From: David Miller <davem@davemloft.net>
Date: 2012-08-08 22:57:58

From: Eric Dumazet <redacted>
Date: Tue, 07 Aug 2012 12:47:11 +0200
From: Eric Dumazet <edumazet@google.com>

After IP route cache removal, I believe rcu_bh() has very little use and
we should remove this RCU variant, since it adds some cycles in fast
path.

Anyway, the call_rcu_bh() use in fib_true is obviously wrong, since
some users only assert rcu_read_lock().

Signed-off-by: Eric Dumazet <edumazet@google.com>
Cc: "Paul E. McKenney" <redacted>
Applied, thanks.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help