diff options
Diffstat (limited to 'freed-ora/current/f13/linux-2.6-twsock-rcu-lockdep-warn.patch')
-rw-r--r-- | freed-ora/current/f13/linux-2.6-twsock-rcu-lockdep-warn.patch | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/freed-ora/current/f13/linux-2.6-twsock-rcu-lockdep-warn.patch b/freed-ora/current/f13/linux-2.6-twsock-rcu-lockdep-warn.patch new file mode 100644 index 000000000..5c105b92f --- /dev/null +++ b/freed-ora/current/f13/linux-2.6-twsock-rcu-lockdep-warn.patch @@ -0,0 +1,36 @@ +commit 7ec75c582e639d956ce3afd499f67febe6f902a4 +Author: Paul E. McKenney <paulmck@linux.vnet.ibm.com> +Date: Tue Apr 27 06:22:01 2010 +0000 + + net: suppress RCU lockdep false positive in twsk_net() + + Calls to twsk_net() are in some cases protected by reference counting + as an alternative to RCU protection. Cases covered by reference counts + include __inet_twsk_kill(), inet_twsk_free(), inet_twdr_do_twkill_work(), + inet_twdr_twcal_tick(), and tcp_timewait_state_process(). RCU is used + by inet_twsk_purge(). Locking is used by established_get_first() + and established_get_next(). Finally, __inet_twsk_hashdance() is an + initialization case. + + It appears to be non-trivial to locate the appropriate locks and + reference counts from within twsk_net(), so used rcu_dereference_raw(). + + Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com> + Acked-by: Eric Dumazet <eric.dumazet@gmail.com> + Signed-off-by: David S. Miller <davem@davemloft.net> + +diff --git a/include/net/inet_timewait_sock.h b/include/net/inet_timewait_sock.h +index 79f67ea..a066fdd 100644 +--- a/include/net/inet_timewait_sock.h ++++ b/include/net/inet_timewait_sock.h +@@ -224,7 +224,9 @@ static inline + struct net *twsk_net(const struct inet_timewait_sock *twsk) + { + #ifdef CONFIG_NET_NS +- return rcu_dereference(twsk->tw_net); ++ return rcu_dereference_raw(twsk->tw_net); /* protected by locking, */ ++ /* reference counting, */ ++ /* initialization, or RCU. */ + #else + return &init_net; + #endif |