Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Mostly simple cases of overlapping changes (adding code nearby, a function whose name changes, for example). Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
@@ -126,7 +126,8 @@ int sysctl_tcp_invalid_ratelimit __read_mostly = HZ/2;
|
||||
#define REXMIT_LOST 1 /* retransmit packets marked lost */
|
||||
#define REXMIT_NEW 2 /* FRTO-style transmit of unsent/new packets */
|
||||
|
||||
static void tcp_gro_dev_warn(struct sock *sk, const struct sk_buff *skb)
|
||||
static void tcp_gro_dev_warn(struct sock *sk, const struct sk_buff *skb,
|
||||
unsigned int len)
|
||||
{
|
||||
static bool __once __read_mostly;
|
||||
|
||||
@@ -137,8 +138,9 @@ static void tcp_gro_dev_warn(struct sock *sk, const struct sk_buff *skb)
|
||||
|
||||
rcu_read_lock();
|
||||
dev = dev_get_by_index_rcu(sock_net(sk), skb->skb_iif);
|
||||
pr_warn("%s: Driver has suspect GRO implementation, TCP performance may be compromised.\n",
|
||||
dev ? dev->name : "Unknown driver");
|
||||
if (!dev || len >= dev->mtu)
|
||||
pr_warn("%s: Driver has suspect GRO implementation, TCP performance may be compromised.\n",
|
||||
dev ? dev->name : "Unknown driver");
|
||||
rcu_read_unlock();
|
||||
}
|
||||
}
|
||||
@@ -161,8 +163,10 @@ static void tcp_measure_rcv_mss(struct sock *sk, const struct sk_buff *skb)
|
||||
if (len >= icsk->icsk_ack.rcv_mss) {
|
||||
icsk->icsk_ack.rcv_mss = min_t(unsigned int, len,
|
||||
tcp_sk(sk)->advmss);
|
||||
if (unlikely(icsk->icsk_ack.rcv_mss != len))
|
||||
tcp_gro_dev_warn(sk, skb);
|
||||
/* Account for possibly-removed options */
|
||||
if (unlikely(len > icsk->icsk_ack.rcv_mss +
|
||||
MAX_TCP_OPTION_SPACE))
|
||||
tcp_gro_dev_warn(sk, skb, len);
|
||||
} else {
|
||||
/* Otherwise, we make more careful check taking into account,
|
||||
* that SACKs block is variable.
|
||||
@@ -874,22 +878,11 @@ static void tcp_update_reordering(struct sock *sk, const int metric,
|
||||
const int ts)
|
||||
{
|
||||
struct tcp_sock *tp = tcp_sk(sk);
|
||||
if (metric > tp->reordering) {
|
||||
int mib_idx;
|
||||
int mib_idx;
|
||||
|
||||
if (metric > tp->reordering) {
|
||||
tp->reordering = min(sysctl_tcp_max_reordering, metric);
|
||||
|
||||
/* This exciting event is worth to be remembered. 8) */
|
||||
if (ts)
|
||||
mib_idx = LINUX_MIB_TCPTSREORDER;
|
||||
else if (tcp_is_reno(tp))
|
||||
mib_idx = LINUX_MIB_TCPRENOREORDER;
|
||||
else if (tcp_is_fack(tp))
|
||||
mib_idx = LINUX_MIB_TCPFACKREORDER;
|
||||
else
|
||||
mib_idx = LINUX_MIB_TCPSACKREORDER;
|
||||
|
||||
NET_INC_STATS(sock_net(sk), mib_idx);
|
||||
#if FASTRETRANS_DEBUG > 1
|
||||
pr_debug("Disorder%d %d %u f%u s%u rr%d\n",
|
||||
tp->rx_opt.sack_ok, inet_csk(sk)->icsk_ca_state,
|
||||
@@ -902,6 +895,18 @@ static void tcp_update_reordering(struct sock *sk, const int metric,
|
||||
}
|
||||
|
||||
tp->rack.reord = 1;
|
||||
|
||||
/* This exciting event is worth to be remembered. 8) */
|
||||
if (ts)
|
||||
mib_idx = LINUX_MIB_TCPTSREORDER;
|
||||
else if (tcp_is_reno(tp))
|
||||
mib_idx = LINUX_MIB_TCPRENOREORDER;
|
||||
else if (tcp_is_fack(tp))
|
||||
mib_idx = LINUX_MIB_TCPFACKREORDER;
|
||||
else
|
||||
mib_idx = LINUX_MIB_TCPSACKREORDER;
|
||||
|
||||
NET_INC_STATS(sock_net(sk), mib_idx);
|
||||
}
|
||||
|
||||
/* This must be called before lost_out is incremented */
|
||||
|
Reference in New Issue
Block a user