tcp: Abstract back handling peer aliveness test into helper function.
authorDavid S. Miller <davem@davemloft.net>
Mon, 9 Jul 2012 23:19:30 +0000 (16:19 -0700)
committerDavid S. Miller <davem@davemloft.net>
Wed, 11 Jul 2012 03:33:49 +0000 (20:33 -0700)
Signed-off-by: David S. Miller <davem@davemloft.net>
include/net/tcp.h
net/ipv4/tcp_ipv4.c
net/ipv4/tcp_metrics.c
net/ipv6/tcp_ipv6.c

index 98ca797001a2a45248f6250426c687b2a7906ad1..5478356ea8c5a39e9b4441f29ea321ebb64bf3ea 100644 (file)
@@ -389,6 +389,7 @@ extern void tcp_enter_loss(struct sock *sk, int how);
 extern void tcp_clear_retrans(struct tcp_sock *tp);
 extern void tcp_update_metrics(struct sock *sk);
 extern void tcp_init_metrics(struct sock *sk);
+extern bool tcp_peer_is_proven(struct request_sock *req, struct dst_entry *dst);
 extern void tcp_disable_fack(struct tcp_sock *tp);
 extern void tcp_close(struct sock *sk, long timeout);
 extern void tcp_init_sock(struct sock *sk);
index 64568fa21d05c0ee07485e67ae4556e8cdaded39..e9312a8f33a1a3fbf1ec0c6e06c0d519db268502 100644 (file)
@@ -1405,7 +1405,7 @@ int tcp_v4_conn_request(struct sock *sk, struct sk_buff *skb)
                         (sysctl_max_syn_backlog - inet_csk_reqsk_queue_len(sk) <
                          (sysctl_max_syn_backlog >> 2)) &&
                         (!peer || !peer->tcp_ts_stamp) &&
-                        (!dst || !dst_metric(dst, RTAX_RTT))) {
+                        !tcp_peer_is_proven(req, dst)) {
                        /* Without syncookies last quarter of
                         * backlog is filled with destinations,
                         * proven to be alive.
index 2793ecf928d346725859df1a606658102fb8a03a..9afe703c85cc2f034f9d0f66a57690d88557ef7c 100644 (file)
@@ -1,7 +1,9 @@
+#include <linux/module.h>
 #include <linux/cache.h>
 #include <linux/tcp.h>
 
 #include <net/inet_connection_sock.h>
+#include <net/request_sock.h>
 #include <net/sock.h>
 #include <net/dst.h>
 #include <net/tcp.h>
@@ -190,3 +192,11 @@ reset:
                tp->snd_cwnd = tcp_init_cwnd(tp, dst);
        tp->snd_cwnd_stamp = tcp_time_stamp;
 }
+
+bool tcp_peer_is_proven(struct request_sock *req, struct dst_entry *dst)
+{
+       if (!dst)
+               return false;
+       return dst_metric(dst, RTAX_RTT) ? true : false;
+}
+EXPORT_SYMBOL_GPL(tcp_peer_is_proven);
index 6cc67ed6c2e6f3b52beb2ec96db2f3a2f2bf821d..75d179555c284ac744952b884f348d1680b698a5 100644 (file)
@@ -1177,7 +1177,7 @@ static int tcp_v6_conn_request(struct sock *sk, struct sk_buff *skb)
                         (sysctl_max_syn_backlog - inet_csk_reqsk_queue_len(sk) <
                          (sysctl_max_syn_backlog >> 2)) &&
                         (!peer || !peer->tcp_ts_stamp) &&
-                        (!dst || !dst_metric(dst, RTAX_RTT))) {
+                        !tcp_peer_is_proven(req, dst)) {
                        /* Without syncookies last quarter of
                         * backlog is filled with destinations,
                         * proven to be alive.