tcp: Abstract back handling peer aliveness test into helper function.
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
4aabd8ef8c
commit
ab92bb2f67
|
@ -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_clear_retrans(struct tcp_sock *tp);
|
||||||
extern void tcp_update_metrics(struct sock *sk);
|
extern void tcp_update_metrics(struct sock *sk);
|
||||||
extern void tcp_init_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_disable_fack(struct tcp_sock *tp);
|
||||||
extern void tcp_close(struct sock *sk, long timeout);
|
extern void tcp_close(struct sock *sk, long timeout);
|
||||||
extern void tcp_init_sock(struct sock *sk);
|
extern void tcp_init_sock(struct sock *sk);
|
||||||
|
|
|
@ -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 - inet_csk_reqsk_queue_len(sk) <
|
||||||
(sysctl_max_syn_backlog >> 2)) &&
|
(sysctl_max_syn_backlog >> 2)) &&
|
||||||
(!peer || !peer->tcp_ts_stamp) &&
|
(!peer || !peer->tcp_ts_stamp) &&
|
||||||
(!dst || !dst_metric(dst, RTAX_RTT))) {
|
!tcp_peer_is_proven(req, dst)) {
|
||||||
/* Without syncookies last quarter of
|
/* Without syncookies last quarter of
|
||||||
* backlog is filled with destinations,
|
* backlog is filled with destinations,
|
||||||
* proven to be alive.
|
* proven to be alive.
|
||||||
|
|
|
@ -1,7 +1,9 @@
|
||||||
|
#include <linux/module.h>
|
||||||
#include <linux/cache.h>
|
#include <linux/cache.h>
|
||||||
#include <linux/tcp.h>
|
#include <linux/tcp.h>
|
||||||
|
|
||||||
#include <net/inet_connection_sock.h>
|
#include <net/inet_connection_sock.h>
|
||||||
|
#include <net/request_sock.h>
|
||||||
#include <net/sock.h>
|
#include <net/sock.h>
|
||||||
#include <net/dst.h>
|
#include <net/dst.h>
|
||||||
#include <net/tcp.h>
|
#include <net/tcp.h>
|
||||||
|
@ -190,3 +192,11 @@ reset:
|
||||||
tp->snd_cwnd = tcp_init_cwnd(tp, dst);
|
tp->snd_cwnd = tcp_init_cwnd(tp, dst);
|
||||||
tp->snd_cwnd_stamp = tcp_time_stamp;
|
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);
|
||||||
|
|
|
@ -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 - inet_csk_reqsk_queue_len(sk) <
|
||||||
(sysctl_max_syn_backlog >> 2)) &&
|
(sysctl_max_syn_backlog >> 2)) &&
|
||||||
(!peer || !peer->tcp_ts_stamp) &&
|
(!peer || !peer->tcp_ts_stamp) &&
|
||||||
(!dst || !dst_metric(dst, RTAX_RTT))) {
|
!tcp_peer_is_proven(req, dst)) {
|
||||||
/* Without syncookies last quarter of
|
/* Without syncookies last quarter of
|
||||||
* backlog is filled with destinations,
|
* backlog is filled with destinations,
|
||||||
* proven to be alive.
|
* proven to be alive.
|
||||||
|
|
Loading…
Reference in a new issue