diff options
Diffstat (limited to 'net/ipv4/tcp_timer.c')
| -rw-r--r-- | net/ipv4/tcp_timer.c | 15 | 
1 files changed, 2 insertions, 13 deletions
| diff --git a/net/ipv4/tcp_timer.c b/net/ipv4/tcp_timer.c index c0feeeef962a..655dd8d7f064 100644 --- a/net/ipv4/tcp_timer.c +++ b/net/ipv4/tcp_timer.c @@ -239,7 +239,6 @@ static int tcp_write_timeout(struct sock *sk)  /* Called with BH disabled */  void tcp_delack_timer_handler(struct sock *sk)  { -	struct tcp_sock *tp = tcp_sk(sk);  	struct inet_connection_sock *icsk = inet_csk(sk);  	sk_mem_reclaim_partial(sk); @@ -254,17 +253,6 @@ void tcp_delack_timer_handler(struct sock *sk)  	}  	icsk->icsk_ack.pending &= ~ICSK_ACK_TIMER; -	if (!skb_queue_empty(&tp->ucopy.prequeue)) { -		struct sk_buff *skb; - -		__NET_INC_STATS(sock_net(sk), LINUX_MIB_TCPSCHEDULERFAILED); - -		while ((skb = __skb_dequeue(&tp->ucopy.prequeue)) != NULL) -			sk_backlog_rcv(sk, skb); - -		tp->ucopy.memory = 0; -	} -  	if (inet_csk_ack_scheduled(sk)) {  		if (!icsk->icsk_ack.pingpong) {  			/* Delayed ACK missed: inflate ATO. */ @@ -652,7 +640,8 @@ static void tcp_keepalive_timer (unsigned long data)  		goto death;  	} -	if (!sock_flag(sk, SOCK_KEEPOPEN) || sk->sk_state == TCP_CLOSE) +	if (!sock_flag(sk, SOCK_KEEPOPEN) || +	    ((1 << sk->sk_state) & (TCPF_CLOSE | TCPF_SYN_SENT)))  		goto out;  	elapsed = keepalive_time_when(tp); |