mirror of https://gitee.com/openkylin/linux.git
tcp: increment retransmit counters in tlp and fast open
Both TLP and Fast Open call __tcp_retransmit_skb() instead of tcp_retransmit_skb() to avoid changing tp->retrans_out. This has the side effect of missing SNMP counters increments as well as tcp_info tcpi_total_retrans updates. Fix this by moving the stats increments of into __tcp_retransmit_skb() Signed-off-by: Eric Dumazet <edumazet@google.com> Acked-by: Nandita Dukkipati <nanditad@google.com> Acked-by: Neal Cardwell <ncardwell@google.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
3dc638d13a
commit
fc9f350106
|
@ -2441,8 +2441,14 @@ int __tcp_retransmit_skb(struct sock *sk, struct sk_buff *skb)
|
|||
err = tcp_transmit_skb(sk, skb, 1, GFP_ATOMIC);
|
||||
}
|
||||
|
||||
if (likely(!err))
|
||||
if (likely(!err)) {
|
||||
TCP_SKB_CB(skb)->sacked |= TCPCB_EVER_RETRANS;
|
||||
/* Update global TCP statistics. */
|
||||
TCP_INC_STATS(sock_net(sk), TCP_MIB_RETRANSSEGS);
|
||||
if (TCP_SKB_CB(skb)->tcp_flags & TCPHDR_SYN)
|
||||
NET_INC_STATS_BH(sock_net(sk), LINUX_MIB_TCPSYNRETRANS);
|
||||
tp->total_retrans++;
|
||||
}
|
||||
return err;
|
||||
}
|
||||
|
||||
|
@ -2452,12 +2458,6 @@ int tcp_retransmit_skb(struct sock *sk, struct sk_buff *skb)
|
|||
int err = __tcp_retransmit_skb(sk, skb);
|
||||
|
||||
if (err == 0) {
|
||||
/* Update global TCP statistics. */
|
||||
TCP_INC_STATS(sock_net(sk), TCP_MIB_RETRANSSEGS);
|
||||
if (TCP_SKB_CB(skb)->tcp_flags & TCPHDR_SYN)
|
||||
NET_INC_STATS_BH(sock_net(sk), LINUX_MIB_TCPSYNRETRANS);
|
||||
tp->total_retrans++;
|
||||
|
||||
#if FASTRETRANS_DEBUG > 0
|
||||
if (TCP_SKB_CB(skb)->sacked & TCPCB_SACKED_RETRANS) {
|
||||
net_dbg_ratelimited("retrans_out leaked\n");
|
||||
|
|
Loading…
Reference in New Issue