tcp: use tcp_md5_needed for timewait sockets
This might speedup tcp_twsk_destructor() a bit, avoiding a cache line miss. Signed-off-by: Eric Dumazet <edumazet@google.com> Signed-off-by: David S. Miller <davem@davemloft.net>hifive-unleashed-5.1
parent
921f9a0f2e
commit
6aedbf986f
|
@ -294,12 +294,15 @@ void tcp_time_wait(struct sock *sk, int state, int timeo)
|
||||||
* so the timewait ack generating code has the key.
|
* so the timewait ack generating code has the key.
|
||||||
*/
|
*/
|
||||||
do {
|
do {
|
||||||
struct tcp_md5sig_key *key;
|
|
||||||
tcptw->tw_md5_key = NULL;
|
tcptw->tw_md5_key = NULL;
|
||||||
key = tp->af_specific->md5_lookup(sk, sk);
|
if (static_branch_unlikely(&tcp_md5_needed)) {
|
||||||
if (key) {
|
struct tcp_md5sig_key *key;
|
||||||
tcptw->tw_md5_key = kmemdup(key, sizeof(*key), GFP_ATOMIC);
|
|
||||||
BUG_ON(tcptw->tw_md5_key && !tcp_alloc_md5sig_pool());
|
key = tp->af_specific->md5_lookup(sk, sk);
|
||||||
|
if (key) {
|
||||||
|
tcptw->tw_md5_key = kmemdup(key, sizeof(*key), GFP_ATOMIC);
|
||||||
|
BUG_ON(tcptw->tw_md5_key && !tcp_alloc_md5sig_pool());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} while (0);
|
} while (0);
|
||||||
#endif
|
#endif
|
||||||
|
@ -338,10 +341,12 @@ EXPORT_SYMBOL(tcp_time_wait);
|
||||||
void tcp_twsk_destructor(struct sock *sk)
|
void tcp_twsk_destructor(struct sock *sk)
|
||||||
{
|
{
|
||||||
#ifdef CONFIG_TCP_MD5SIG
|
#ifdef CONFIG_TCP_MD5SIG
|
||||||
struct tcp_timewait_sock *twsk = tcp_twsk(sk);
|
if (static_branch_unlikely(&tcp_md5_needed)) {
|
||||||
|
struct tcp_timewait_sock *twsk = tcp_twsk(sk);
|
||||||
|
|
||||||
if (twsk->tw_md5_key)
|
if (twsk->tw_md5_key)
|
||||||
kfree_rcu(twsk->tw_md5_key, rcu);
|
kfree_rcu(twsk->tw_md5_key, rcu);
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(tcp_twsk_destructor);
|
EXPORT_SYMBOL_GPL(tcp_twsk_destructor);
|
||||||
|
|
Loading…
Reference in New Issue