net: udp_unhash() can test if sk is hashed
Subsystems (3)
PATCH 1/1 net: udp_unhash() can test if sk is hashed
Impact: Optimization
Like done in inet_unhash(), we can avoid taking a chain lock if socket is not hashed in udp_unhash()
Triggered by close(socket(AF_INET, SOCK_DGRAM, 0));
Signed-off-by Eric Dumazet <[email protected]>
---net/ipv4/udp.c | 18 ++++++++++--------
1 files changed, 10 insertions(+), 8 deletions(-)
net/ipv4/udp.c +10 -8
@@ -970,16 +970,18 @@ int udp_disconnect(struct sock *sk, int flags)void udp_lib_unhash (struct sock *sk) { -struct udp_table *udptable = sk->sk_prot->h.udp_table; -unsigned int hash =udp_hashfn (sock_net (sk), sk->sk_hash); -struct udp_hslot *hslot = &udptable->hash[hash]; +if (sk_hashed (sk)) { +struct udp_table *udptable = sk->sk_prot->h.udp_table; +unsigned int hash =udp_hashfn (sock_net (sk), sk->sk_hash); +struct udp_hslot *hslot = &udptable->hash[hash]; -spin_lock_bh (&hslot->lock); -if (sk_nulls_del_node_init_rcu (sk)) { -inet_sk (sk)->num =0 ; -sock_prot_inuse_add (sock_net (sk), sk->sk_prot,-1 ); +spin_lock_bh (&hslot->lock); +if (sk_nulls_del_node_init_rcu (sk)) { +inet_sk (sk)->num =0 ; +sock_prot_inuse_add (sock_net (sk), sk->sk_prot,-1 ); + } +spin_unlock_bh (&hslot->lock); } -spin_unlock_bh (&hslot->lock); }EXPORT_SYMBOL (udp_lib_unhash);
From: Eric Dumazet <[email protected]>
Date: Tue, 25 Nov 2008 21:25:55 +0100
Quoted 8 lines
Impact: Optimization
Like done in
inet_unhash(), we can avoid taking a chain lock if socket is not hashed inudp_unhash()Triggered by
close(socket(AF_INET, SOCK_DGRAM, 0));Signed-off-by Eric Dumazet <[email protected]>
Applied, thanks Eric.