提交 bb68b647 编写于 作者: C Christoph Paasch 提交者: David S. Miller

ipv4: Don't add TCP-code in inet_sock_destruct

Signed-off-by: NChristoph Paasch <christoph.paasch@uclouvain.be>
Acked-by: NH.K. Jerry Chu <hkchu@google.com>
Acked-by: NEric Dumazet <edumazet@google.com>
Signed-off-by: NDavid S. Miller <davem@davemloft.net>
上级 9baa0b03
...@@ -574,6 +574,8 @@ static inline bool fastopen_cookie_present(struct tcp_fastopen_cookie *foc) ...@@ -574,6 +574,8 @@ static inline bool fastopen_cookie_present(struct tcp_fastopen_cookie *foc)
return foc->len != -1; return foc->len != -1;
} }
extern void tcp_sock_destruct(struct sock *sk);
static inline int fastopen_init_queue(struct sock *sk, int backlog) static inline int fastopen_init_queue(struct sock *sk, int backlog)
{ {
struct request_sock_queue *queue = struct request_sock_queue *queue =
...@@ -585,6 +587,8 @@ static inline int fastopen_init_queue(struct sock *sk, int backlog) ...@@ -585,6 +587,8 @@ static inline int fastopen_init_queue(struct sock *sk, int backlog)
sk->sk_allocation); sk->sk_allocation);
if (queue->fastopenq == NULL) if (queue->fastopenq == NULL)
return -ENOMEM; return -ENOMEM;
sk->sk_destruct = tcp_sock_destruct;
spin_lock_init(&queue->fastopenq->lock); spin_lock_init(&queue->fastopenq->lock);
} }
queue->fastopenq->max_qlen = backlog; queue->fastopenq->max_qlen = backlog;
......
...@@ -149,8 +149,6 @@ void inet_sock_destruct(struct sock *sk) ...@@ -149,8 +149,6 @@ void inet_sock_destruct(struct sock *sk)
pr_err("Attempt to release alive inet socket %p\n", sk); pr_err("Attempt to release alive inet socket %p\n", sk);
return; return;
} }
if (sk->sk_protocol == IPPROTO_TCP)
kfree(inet_csk(sk)->icsk_accept_queue.fastopenq);
WARN_ON(atomic_read(&sk->sk_rmem_alloc)); WARN_ON(atomic_read(&sk->sk_rmem_alloc));
WARN_ON(atomic_read(&sk->sk_wmem_alloc)); WARN_ON(atomic_read(&sk->sk_wmem_alloc));
......
...@@ -2325,6 +2325,13 @@ int tcp_disconnect(struct sock *sk, int flags) ...@@ -2325,6 +2325,13 @@ int tcp_disconnect(struct sock *sk, int flags)
} }
EXPORT_SYMBOL(tcp_disconnect); EXPORT_SYMBOL(tcp_disconnect);
void tcp_sock_destruct(struct sock *sk)
{
inet_sock_destruct(sk);
kfree(inet_csk(sk)->icsk_accept_queue.fastopenq);
}
static inline bool tcp_can_repair_sock(const struct sock *sk) static inline bool tcp_can_repair_sock(const struct sock *sk)
{ {
return capable(CAP_NET_ADMIN) && return capable(CAP_NET_ADMIN) &&
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册