udp: secondary hash on (local port, local address)
authorEric Dumazet <eric.dumazet@gmail.com>
Sun, 8 Nov 2009 10:17:58 +0000 (10:17 +0000)
committerDavid S. Miller <davem@davemloft.net>
Mon, 9 Nov 2009 04:53:06 +0000 (20:53 -0800)
commit512615b6b843ff3ff5ad583f34c39b3f302f5f26
tree7420705a314bc691bc478225148935dc67f71904
parentd4cada4ae1c012815f95fa507eb86a0ae9d607d7
udp: secondary hash on (local port, local address)

Extends udp_table to contain a secondary hash table.

socket anchor for this second hash is free, because UDP
doesnt use skc_bind_node : We define an union to hold
both skc_bind_node & a new hlist_nulls_node udp_portaddr_node

udp_lib_get_port() inserts sockets into second hash chain
(additional cost of one atomic op)

udp_lib_unhash() deletes socket from second hash chain
(additional cost of one atomic op)

Note : No spinlock lockdep annotation is needed, because
lock for the secondary hash chain is always get after
lock for primary hash chain.

Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/linux/udp.h
include/net/sock.h
include/net/udp.h
net/ipv4/udp.c