tcp: Clear sack info on purge
This ensures that the sack information is cleared when TCP is in FIN-WAIT1 state. This also tracks whenever tcp queue purge is called which resets all the transmit queue information and ensures there are no outstanding packets. This addresses the following - 16496.596106: <6> Unable to handle kernel paging request at virtual address fffffff2cd81a368 16496.730771: <2> pc : tcp_ack+0x174/0x11e8 16496.734536: <2> lr : tcp_rcv_state_process+0x318/0x1300 16497.183109: <2> Call trace: 16497.183114: <2> tcp_ack+0x174/0x11e8 16497.183115: <2> tcp_rcv_state_process+0x318/0x1300 16497.183117: <2> tcp_v4_do_rcv+0x1a8/0x1f0 16497.183118: <2> tcp_v4_rcv+0xe90/0xec8 16497.183120: <2> ip_protocol_deliver_rcu+0x150/0x298 16497.183121: <2> ip_local_deliver+0x21c/0x2a8 16497.183122: <2> ip_rcv+0x1c4/0x210 16497.183124: <2> __netif_receive_skb_core+0xab0/0xd90 16497.183125: <2> netif_receive_skb_internal+0x12c/0x368 16497.183126: <2> napi_gro_receive+0x1e0/0x290 No outstanding data is expected on a socket after write queue purge is called. CRs-Fixed: 2541019 Change-Id: I586c43931969eae48fe1bf9799ef38267401fdc6 Signed-off-by: Subash Abhinov Kasiviswanathan <subashab@codeaurora.org>
This commit is contained in:
committed by
Gerrit - the friendly Code Review server
parent
aa7030af64
commit
ff8ce51863
@@ -232,7 +232,8 @@ struct tcp_sock {
|
||||
fastopen_connect:1, /* FASTOPEN_CONNECT sockopt */
|
||||
fastopen_no_cookie:1, /* Allow send/recv SYN+data without a cookie */
|
||||
is_sack_reneg:1, /* in recovery from loss with SACK reneg? */
|
||||
unused:2;
|
||||
unused:1,
|
||||
wqp_called:1;
|
||||
u8 nonagle : 4,/* Disable Nagle algorithm? */
|
||||
thin_lto : 1,/* Use linear timeouts for thin streams */
|
||||
recvmsg_inq : 1,/* Indicate # of bytes in queue upon recvmsg */
|
||||
|
||||
@@ -2534,6 +2534,9 @@ void tcp_write_queue_purge(struct sock *sk)
|
||||
INIT_LIST_HEAD(&tcp_sk(sk)->tsorted_sent_queue);
|
||||
sk_mem_reclaim(sk);
|
||||
tcp_clear_all_retrans_hints(tcp_sk(sk));
|
||||
tcp_sk(sk)->highest_sack = NULL;
|
||||
tcp_sk(sk)->sacked_out = 0;
|
||||
tcp_sk(sk)->wqp_called = 1;
|
||||
tcp_sk(sk)->packets_out = 0;
|
||||
inet_csk(sk)->icsk_backoff = 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user