Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

tcp: Remove timewait_sock_ops.twsk_destructor().

Since DCCP has been removed, sk->sk_prot->twsk_prot->twsk_destructor
is always tcp_twsk_destructor().

Let's call tcp_twsk_destructor() directly in inet_twsk_free() and
remove ->twsk_destructor().

While at it, tcp_twsk_destructor() is un-exported.

Signed-off-by: Kuniyuki Iwashima <kuniyu@google.com>
Reviewed-by: Eric Dumazet <edumazet@google.com>
Link: https://patch.msgid.link/20250822190803.540788-3-kuniyu@google.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>

authored by

Kuniyuki Iwashima and committed by
Jakub Kicinski
2d842b6c 9db0163e

+3 -12
-7
include/net/timewait_sock.h
··· 15 15 struct kmem_cache *twsk_slab; 16 16 char *twsk_slab_name; 17 17 unsigned int twsk_obj_size; 18 - void (*twsk_destructor)(struct sock *sk); 19 18 }; 20 - 21 - static inline void twsk_destructor(struct sock *sk) 22 - { 23 - if (sk->sk_prot->twsk_prot->twsk_destructor != NULL) 24 - sk->sk_prot->twsk_prot->twsk_destructor(sk); 25 - } 26 19 27 20 #endif /* _TIMEWAIT_SOCK_H */
+3 -2
net/ipv4/inet_timewait_sock.c
··· 15 15 #include <net/inet_hashtables.h> 16 16 #include <net/inet_timewait_sock.h> 17 17 #include <net/ip.h> 18 - 18 + #include <net/tcp.h> 19 19 20 20 /** 21 21 * inet_twsk_bind_unhash - unhash a timewait socket from bind hash ··· 74 74 void inet_twsk_free(struct inet_timewait_sock *tw) 75 75 { 76 76 struct module *owner = tw->tw_prot->owner; 77 - twsk_destructor((struct sock *)tw); 77 + 78 + tcp_twsk_destructor((struct sock *)tw); 78 79 kmem_cache_free(tw->tw_prot->twsk_prot->twsk_slab, tw); 79 80 module_put(owner); 80 81 }
-1
net/ipv4/tcp_ipv4.c
··· 2459 2459 2460 2460 static struct timewait_sock_ops tcp_timewait_sock_ops = { 2461 2461 .twsk_obj_size = sizeof(struct tcp_timewait_sock), 2462 - .twsk_destructor= tcp_twsk_destructor, 2463 2462 }; 2464 2463 2465 2464 void inet_sk_rx_dst_set(struct sock *sk, const struct sk_buff *skb)
-1
net/ipv4/tcp_minisocks.c
··· 401 401 #endif 402 402 tcp_ao_destroy_sock(sk, true); 403 403 } 404 - EXPORT_IPV6_MOD_GPL(tcp_twsk_destructor); 405 404 406 405 void tcp_twsk_purge(struct list_head *net_exit_list) 407 406 {
-1
net/ipv6/tcp_ipv6.c
··· 2050 2050 2051 2051 static struct timewait_sock_ops tcp6_timewait_sock_ops = { 2052 2052 .twsk_obj_size = sizeof(struct tcp6_timewait_sock), 2053 - .twsk_destructor = tcp_twsk_destructor, 2054 2053 }; 2055 2054 2056 2055 INDIRECT_CALLABLE_SCOPE void tcp_v6_send_check(struct sock *sk, struct sk_buff *skb)