tcp: keepalive cleanups
Eric Dumazet [Sat, 29 Aug 2009 06:48:54 +0000 (23:48 -0700)]
Introduce keepalive_probes(tp) helper, and use it, like
keepalive_time_when(tp) and keepalive_intvl_when(tp)

Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>

include/net/tcp.h
net/ipv4/tcp.c
net/ipv4/tcp_timer.c

index 88af843..cbb2a48 100644 (file)
@@ -1007,6 +1007,11 @@ static inline int keepalive_time_when(const struct tcp_sock *tp)
        return tp->keepalive_time ? : sysctl_tcp_keepalive_time;
 }
 
+static inline int keepalive_probes(const struct tcp_sock *tp)
+{
+       return tp->keepalive_probes ? : sysctl_tcp_keepalive_probes;
+}
+
 static inline int tcp_fin_time(const struct sock *sk)
 {
        int fin_timeout = tcp_sk(sk)->linger2 ? : sysctl_tcp_fin_timeout;
index 9114524..59f69a6 100644 (file)
@@ -2336,13 +2336,13 @@ static int do_tcp_getsockopt(struct sock *sk, int level,
                val = !!(tp->nonagle&TCP_NAGLE_CORK);
                break;
        case TCP_KEEPIDLE:
-               val = (tp->keepalive_time ? : sysctl_tcp_keepalive_time) / HZ;
+               val = keepalive_time_when(tp) / HZ;
                break;
        case TCP_KEEPINTVL:
-               val = (tp->keepalive_intvl ? : sysctl_tcp_keepalive_intvl) / HZ;
+               val = keepalive_intvl_when(tp) / HZ;
                break;
        case TCP_KEEPCNT:
-               val = tp->keepalive_probes ? : sysctl_tcp_keepalive_probes;
+               val = keepalive_probes(tp);
                break;
        case TCP_SYNCNT:
                val = icsk->icsk_syn_retries ? : sysctl_tcp_syn_retries;
index b144a26..c520fb6 100644 (file)
@@ -499,8 +499,7 @@ static void tcp_keepalive_timer (unsigned long data)
        elapsed = tcp_time_stamp - tp->rcv_tstamp;
 
        if (elapsed >= keepalive_time_when(tp)) {
-               if ((!tp->keepalive_probes && icsk->icsk_probes_out >= sysctl_tcp_keepalive_probes) ||
-                    (tp->keepalive_probes && icsk->icsk_probes_out >= tp->keepalive_probes)) {
+               if (icsk->icsk_probes_out >= keepalive_probes(tp)) {
                        tcp_send_active_reset(sk, GFP_ATOMIC);
                        tcp_write_err(sk);
                        goto out;