net: Convert TCP/DCCP listening hash tables to use RCU
authorEric Dumazet <dada1@cosmosbay.com>
Mon, 24 Nov 2008 01:22:55 +0000 (17:22 -0800)
committerDavid S. Miller <davem@davemloft.net>
Mon, 24 Nov 2008 01:22:55 +0000 (17:22 -0800)
commitc25eb3bfb97294d0543a81230fbc237046b4b84c
tree6c9deabfb12f4d31f280cfcfe7e7580a2089931c
parent8c862c23e2563e6aedfc6c4aa6827cadb83f2414
net: Convert TCP/DCCP listening hash tables to use RCU

This is the last step to be able to perform full RCU lookups
in __inet_lookup() : After established/timewait tables, we
add RCU lookups to listening hash table.

The only trick here is that a socket of a given type (TCP ipv4,
TCP ipv6, ...) can now flight between two different tables
(established and listening) during a RCU grace period, so we
must use different 'nulls' end-of-chain values for two tables.

We define a large value :

#define LISTENING_NULLS_BASE (1U << 29)

So that slots in listening table are guaranteed to have different
end-of-chain values than slots in established table. A reader can
still detect it finished its lookup in the right chain.

Signed-off-by: Eric Dumazet <dada1@cosmosbay.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/net/inet_hashtables.h
net/ipv4/inet_diag.c
net/ipv4/inet_hashtables.c
net/ipv4/tcp_ipv4.c
net/ipv6/inet6_hashtables.c