diff options
Diffstat (limited to 'net/ipv4/tcp_input.c')
| -rw-r--r-- | net/ipv4/tcp_input.c | 10 | 
1 files changed, 5 insertions, 5 deletions
diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c index 5def3c48870e..731d3045b50a 100644 --- a/net/ipv4/tcp_input.c +++ b/net/ipv4/tcp_input.c @@ -402,11 +402,12 @@ static int __tcp_grow_window(const struct sock *sk, const struct sk_buff *skb)  static void tcp_grow_window(struct sock *sk, const struct sk_buff *skb)  {  	struct tcp_sock *tp = tcp_sk(sk); +	int room; + +	room = min_t(int, tp->window_clamp, tcp_space(sk)) - tp->rcv_ssthresh;  	/* Check #1 */ -	if (tp->rcv_ssthresh < tp->window_clamp && -	    (int)tp->rcv_ssthresh < tcp_space(sk) && -	    !tcp_under_memory_pressure(sk)) { +	if (room > 0 && !tcp_under_memory_pressure(sk)) {  		int incr;  		/* Check #2. Increase window, if skb with such overhead @@ -419,8 +420,7 @@ static void tcp_grow_window(struct sock *sk, const struct sk_buff *skb)  		if (incr) {  			incr = max_t(int, incr, 2 * skb->len); -			tp->rcv_ssthresh = min(tp->rcv_ssthresh + incr, -					       tp->window_clamp); +			tp->rcv_ssthresh += min(room, incr);  			inet_csk(sk)->icsk_ack.quick |= 1;  		}  	}  | 
