|
@@ -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");
|