Commit 42b6785e authored by YOSHIFUJI Hideaki's avatar YOSHIFUJI Hideaki Committed by David S. Miller

[NET]: Introduce protocol-specific destructor for time-wait sockets.

Signed-off-by: default avatarYOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 9469c7b4
...@@ -196,6 +196,7 @@ static inline void inet_twsk_put(struct inet_timewait_sock *tw) ...@@ -196,6 +196,7 @@ static inline void inet_twsk_put(struct inet_timewait_sock *tw)
{ {
if (atomic_dec_and_test(&tw->tw_refcnt)) { if (atomic_dec_and_test(&tw->tw_refcnt)) {
struct module *owner = tw->tw_prot->owner; struct module *owner = tw->tw_prot->owner;
twsk_destructor((struct sock *)tw);
#ifdef SOCK_REFCNT_DEBUG #ifdef SOCK_REFCNT_DEBUG
printk(KERN_DEBUG "%s timewait_sock %p released\n", printk(KERN_DEBUG "%s timewait_sock %p released\n",
tw->tw_prot->name, tw); tw->tw_prot->name, tw);
......
...@@ -19,6 +19,7 @@ struct timewait_sock_ops { ...@@ -19,6 +19,7 @@ struct timewait_sock_ops {
unsigned int twsk_obj_size; unsigned int twsk_obj_size;
int (*twsk_unique)(struct sock *sk, int (*twsk_unique)(struct sock *sk,
struct sock *sktw, void *twp); struct sock *sktw, void *twp);
void (*twsk_destructor)(struct sock *sk);
}; };
static inline int twsk_unique(struct sock *sk, struct sock *sktw, void *twp) static inline int twsk_unique(struct sock *sk, struct sock *sktw, void *twp)
...@@ -28,4 +29,10 @@ static inline int twsk_unique(struct sock *sk, struct sock *sktw, void *twp) ...@@ -28,4 +29,10 @@ static inline int twsk_unique(struct sock *sk, struct sock *sktw, void *twp)
return 0; return 0;
} }
static inline void twsk_destructor(struct sock *sk)
{
if (sk->sk_prot->twsk_prot->twsk_destructor != NULL)
sk->sk_prot->twsk_prot->twsk_destructor(sk);
}
#endif /* _TIMEWAIT_SOCK_H */ #endif /* _TIMEWAIT_SOCK_H */
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment