tcp: factor out __tcp_close() helper
unlocked version of protocol level close, will be used by MPTCP to allow decouple orphaning and subflow level close. Signed-off-by: Paolo Abeni <pabeni@redhat.com> Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
e2223995a2
commit
77c3c95637
@ -395,6 +395,7 @@ void tcp_update_metrics(struct sock *sk);
|
|||||||
void tcp_init_metrics(struct sock *sk);
|
void tcp_init_metrics(struct sock *sk);
|
||||||
void tcp_metrics_init(void);
|
void tcp_metrics_init(void);
|
||||||
bool tcp_peer_is_proven(struct request_sock *req, struct dst_entry *dst);
|
bool tcp_peer_is_proven(struct request_sock *req, struct dst_entry *dst);
|
||||||
|
void __tcp_close(struct sock *sk, long timeout);
|
||||||
void tcp_close(struct sock *sk, long timeout);
|
void tcp_close(struct sock *sk, long timeout);
|
||||||
void tcp_init_sock(struct sock *sk);
|
void tcp_init_sock(struct sock *sk);
|
||||||
void tcp_init_transfer(struct sock *sk, int bpf_op, struct sk_buff *skb);
|
void tcp_init_transfer(struct sock *sk, int bpf_op, struct sk_buff *skb);
|
||||||
|
@ -2420,13 +2420,12 @@ bool tcp_check_oom(struct sock *sk, int shift)
|
|||||||
return too_many_orphans || out_of_socket_memory;
|
return too_many_orphans || out_of_socket_memory;
|
||||||
}
|
}
|
||||||
|
|
||||||
void tcp_close(struct sock *sk, long timeout)
|
void __tcp_close(struct sock *sk, long timeout)
|
||||||
{
|
{
|
||||||
struct sk_buff *skb;
|
struct sk_buff *skb;
|
||||||
int data_was_unread = 0;
|
int data_was_unread = 0;
|
||||||
int state;
|
int state;
|
||||||
|
|
||||||
lock_sock(sk);
|
|
||||||
sk->sk_shutdown = SHUTDOWN_MASK;
|
sk->sk_shutdown = SHUTDOWN_MASK;
|
||||||
|
|
||||||
if (sk->sk_state == TCP_LISTEN) {
|
if (sk->sk_state == TCP_LISTEN) {
|
||||||
@ -2590,6 +2589,12 @@ adjudge_to_death:
|
|||||||
out:
|
out:
|
||||||
bh_unlock_sock(sk);
|
bh_unlock_sock(sk);
|
||||||
local_bh_enable();
|
local_bh_enable();
|
||||||
|
}
|
||||||
|
|
||||||
|
void tcp_close(struct sock *sk, long timeout)
|
||||||
|
{
|
||||||
|
lock_sock(sk);
|
||||||
|
__tcp_close(sk, timeout);
|
||||||
release_sock(sk);
|
release_sock(sk);
|
||||||
sock_put(sk);
|
sock_put(sk);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user