NET: Proportional Rate Reduction for TCP
/net/ipv4/tcp_output.c
blob:b764e2a61ebd57d9773a9c09860de3ccba76f7fa -> blob:7e4feb53465d49aabbde894d5097d5a506ebb8fb
--- net/ipv4/tcp_output.c
+++ net/ipv4/tcp_output.c
@@ -1794,11 +1794,13 @@ static int tcp_write_xmit(struct sock *s
tcp_event_new_data_sent(sk, skb);
tcp_minshall_update(tp, mss_now, skb);
- sent_pkts++;
+ sent_pkts += tcp_skb_pcount(skb);
if (push_one)
break;
}
+ if (inet_csk(sk)->icsk_ca_state == TCP_CA_Recovery)
+ tp->prr_out += sent_pkts;
if (likely(sent_pkts)) {
tcp_cwnd_validate(sk);
@@ -2301,6 +2303,9 @@ begin_fwd:
return;
NET_INC_STATS_BH(sock_net(sk), mib_idx);
+ if (inet_csk(sk)->icsk_ca_state == TCP_CA_Recovery)
+ tp->prr_out += tcp_skb_pcount(skb);
+
if (skb == tcp_write_queue_head(sk))
inet_csk_reset_xmit_timer(sk, ICSK_TIME_RETRANS,
inet_csk(sk)->icsk_rto,