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>
This commit is contained in:
parent
d4c4f07df1
commit
7ec75c582e
1 changed files with 3 additions and 1 deletions
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue