mirror of https://gitee.com/openkylin/linux.git
tcp: purge write queue upon aborting the connection
When the connection is aborted, there is no point in keeping the packets on the write queue until the connection is closed. Similar toa27fd7a8ed
('tcp: purge write queue upon RST'), this is essential for a correct MSG_ZEROCOPY implementation, because userspace cannot call close(fd) before receiving zerocopy signals even when the connection is aborted. Fixes:f214f915e7
("tcp: enable MSG_ZEROCOPY") Signed-off-by: Soheil Hassas Yeganeh <soheil@google.com> Signed-off-by: Neal Cardwell <ncardwell@google.com> Reviewed-by: Eric Dumazet <edumazet@google.com> Signed-off-by: Yuchung Cheng <ycheng@google.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
67f93df79a
commit
e05836ac07
|
@ -3566,6 +3566,7 @@ int tcp_abort(struct sock *sk, int err)
|
|||
|
||||
bh_unlock_sock(sk);
|
||||
local_bh_enable();
|
||||
tcp_write_queue_purge(sk);
|
||||
release_sock(sk);
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -34,6 +34,7 @@ static void tcp_write_err(struct sock *sk)
|
|||
sk->sk_err = sk->sk_err_soft ? : ETIMEDOUT;
|
||||
sk->sk_error_report(sk);
|
||||
|
||||
tcp_write_queue_purge(sk);
|
||||
tcp_done(sk);
|
||||
__NET_INC_STATS(sock_net(sk), LINUX_MIB_TCPABORTONTIMEOUT);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue