aboutsummaryrefslogtreecommitdiffstats
path: root/include/net
diff options
context:
space:
mode:
Diffstat (limited to 'include/net')
-rw-r--r--include/net/tcp.h19
1 files changed, 19 insertions, 0 deletions
diff --git a/include/net/tcp.h b/include/net/tcp.h
index 54c399886275..44ba4a21cbdc 100644
--- a/include/net/tcp.h
+++ b/include/net/tcp.h
@@ -218,6 +218,7 @@ extern int sysctl_tcp_low_latency;
218extern int sysctl_tcp_nometrics_save; 218extern int sysctl_tcp_nometrics_save;
219extern int sysctl_tcp_moderate_rcvbuf; 219extern int sysctl_tcp_moderate_rcvbuf;
220extern int sysctl_tcp_tso_win_divisor; 220extern int sysctl_tcp_tso_win_divisor;
221extern int sysctl_tcp_abc;
221 222
222extern atomic_t tcp_memory_allocated; 223extern atomic_t tcp_memory_allocated;
223extern atomic_t tcp_sockets_allocated; 224extern atomic_t tcp_sockets_allocated;
@@ -770,6 +771,23 @@ static inline __u32 tcp_current_ssthresh(const struct sock *sk)
770 */ 771 */
771static inline void tcp_slow_start(struct tcp_sock *tp) 772static inline void tcp_slow_start(struct tcp_sock *tp)
772{ 773{
774 if (sysctl_tcp_abc) {
775 /* RFC3465: Slow Start
776 * TCP sender SHOULD increase cwnd by the number of
777 * previously unacknowledged bytes ACKed by each incoming
778 * acknowledgment, provided the increase is not more than L
779 */
780 if (tp->bytes_acked < tp->mss_cache)
781 return;
782
783 /* We MAY increase by 2 if discovered delayed ack */
784 if (sysctl_tcp_abc > 1 && tp->bytes_acked > 2*tp->mss_cache) {
785 if (tp->snd_cwnd < tp->snd_cwnd_clamp)
786 tp->snd_cwnd++;
787 }
788 }
789 tp->bytes_acked = 0;
790
773 if (tp->snd_cwnd < tp->snd_cwnd_clamp) 791 if (tp->snd_cwnd < tp->snd_cwnd_clamp)
774 tp->snd_cwnd++; 792 tp->snd_cwnd++;
775} 793}
@@ -804,6 +822,7 @@ static inline void tcp_enter_cwr(struct sock *sk)
804 struct tcp_sock *tp = tcp_sk(sk); 822 struct tcp_sock *tp = tcp_sk(sk);
805 823
806 tp->prior_ssthresh = 0; 824 tp->prior_ssthresh = 0;
825 tp->bytes_acked = 0;
807 if (inet_csk(sk)->icsk_ca_state < TCP_CA_CWR) { 826 if (inet_csk(sk)->icsk_ca_state < TCP_CA_CWR) {
808 __tcp_enter_cwr(sk); 827 __tcp_enter_cwr(sk);
809 tcp_set_ca_state(sk, TCP_CA_CWR); 828 tcp_set_ca_state(sk, TCP_CA_CWR);