tcp: add LINUX_MIB_TCPRETRANSFAIL counter
authorEric Dumazet <eric.dumazet@gmail.com>
Wed, 25 Jan 2012 04:44:20 +0000 (04:44 +0000)
committerDavid S. Miller <davem@davemloft.net>
Thu, 26 Jan 2012 18:51:00 +0000 (13:51 -0500)
It might be useful to get a counter of failed tcp_retransmit_skb()
calls.

Reported-by: Satoru Moriya <satoru.moriya@hds.com>
Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/linux/snmp.h
net/ipv4/proc.c
net/ipv4/tcp_output.c

index c1241c4..8ee8af4 100644 (file)
@@ -232,6 +232,7 @@ enum
        LINUX_MIB_TCPTIMEWAITOVERFLOW,          /* TCPTimeWaitOverflow */
        LINUX_MIB_TCPREQQFULLDOCOOKIES,         /* TCPReqQFullDoCookies */
        LINUX_MIB_TCPREQQFULLDROP,              /* TCPReqQFullDrop */
+       LINUX_MIB_TCPRETRANSFAIL,               /* TCPRetransFail */
        __LINUX_MIB_MAX
 };
 
index 6afc807..02d6107 100644 (file)
@@ -256,6 +256,7 @@ static const struct snmp_mib snmp4_net_list[] = {
        SNMP_MIB_ITEM("TCPTimeWaitOverflow", LINUX_MIB_TCPTIMEWAITOVERFLOW),
        SNMP_MIB_ITEM("TCPReqQFullDoCookies", LINUX_MIB_TCPREQQFULLDOCOOKIES),
        SNMP_MIB_ITEM("TCPReqQFullDrop", LINUX_MIB_TCPREQQFULLDROP),
+       SNMP_MIB_ITEM("TCPRetransFail", LINUX_MIB_TCPRETRANSFAIL),
        SNMP_MIB_SENTINEL
 };
 
index 8c8de27..561550a 100644 (file)
@@ -2308,8 +2308,10 @@ begin_fwd:
                if (sacked & (TCPCB_SACKED_ACKED|TCPCB_SACKED_RETRANS))
                        continue;
 
-               if (tcp_retransmit_skb(sk, skb))
+               if (tcp_retransmit_skb(sk, skb)) {
+                       NET_INC_STATS_BH(sock_net(sk), LINUX_MIB_TCPRETRANSFAIL);
                        return;
+               }
                NET_INC_STATS_BH(sock_net(sk), mib_idx);
 
                if (inet_csk(sk)->icsk_ca_state == TCP_CA_Recovery)