diff options
Diffstat (limited to 'net/ipv4/tcp_input.c')
| -rw-r--r-- | net/ipv4/tcp_input.c | 14 | 
1 files changed, 9 insertions, 5 deletions
diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c index 9944c1d9a218..257b61789eeb 100644 --- a/net/ipv4/tcp_input.c +++ b/net/ipv4/tcp_input.c @@ -85,7 +85,7 @@ int sysctl_tcp_ecn __read_mostly = 2;  EXPORT_SYMBOL(sysctl_tcp_ecn);  int sysctl_tcp_dsack __read_mostly = 1;  int sysctl_tcp_app_win __read_mostly = 31; -int sysctl_tcp_adv_win_scale __read_mostly = 2; +int sysctl_tcp_adv_win_scale __read_mostly = 1;  EXPORT_SYMBOL(sysctl_tcp_adv_win_scale);  int sysctl_tcp_stdurg __read_mostly; @@ -335,6 +335,7 @@ static void tcp_grow_window(struct sock *sk, const struct sk_buff *skb)  			incr = __tcp_grow_window(sk, skb);  		if (incr) { +			incr = max_t(int, incr, 2 * skb->len);  			tp->rcv_ssthresh = min(tp->rcv_ssthresh + incr,  					       tp->window_clamp);  			inet_csk(sk)->icsk_ack.quick |= 1; @@ -494,7 +495,7 @@ static inline void tcp_rcv_rtt_measure(struct tcp_sock *tp)  		goto new_measure;  	if (before(tp->rcv_nxt, tp->rcv_rtt_est.seq))  		return; -	tcp_rcv_rtt_update(tp, jiffies - tp->rcv_rtt_est.time, 1); +	tcp_rcv_rtt_update(tp, tcp_time_stamp - tp->rcv_rtt_est.time, 1);  new_measure:  	tp->rcv_rtt_est.seq = tp->rcv_nxt + tp->rcv_wnd; @@ -2867,11 +2868,14 @@ static inline void tcp_complete_cwr(struct sock *sk)  	/* Do not moderate cwnd if it's already undone in cwr or recovery. */  	if (tp->undo_marker) { -		if (inet_csk(sk)->icsk_ca_state == TCP_CA_CWR) +		if (inet_csk(sk)->icsk_ca_state == TCP_CA_CWR) {  			tp->snd_cwnd = min(tp->snd_cwnd, tp->snd_ssthresh); -		else /* PRR */ +			tp->snd_cwnd_stamp = tcp_time_stamp; +		} else if (tp->snd_ssthresh < TCP_INFINITE_SSTHRESH) { +			/* PRR algorithm. */  			tp->snd_cwnd = tp->snd_ssthresh; -		tp->snd_cwnd_stamp = tcp_time_stamp; +			tp->snd_cwnd_stamp = tcp_time_stamp; +		}  	}  	tcp_ca_event(sk, CA_EVENT_COMPLETE_CWR);  }  | 
