Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net
Rejecting non-native endian BTF overlapped with the addition of support for it. The rest were more simple overlapping changes, except the renesas ravb binding update, which had to follow a file move as well as a YAML conversion. Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
@@ -490,6 +490,7 @@ static struct xfrm_tunnel vti_ipip_handler __read_mostly = {
|
||||
.priority = 0,
|
||||
};
|
||||
|
||||
#if IS_ENABLED(CONFIG_IPV6)
|
||||
static struct xfrm_tunnel vti_ipip6_handler __read_mostly = {
|
||||
.handler = vti_rcv_tunnel,
|
||||
.cb_handler = vti_rcv_cb,
|
||||
@@ -497,6 +498,7 @@ static struct xfrm_tunnel vti_ipip6_handler __read_mostly = {
|
||||
.priority = 0,
|
||||
};
|
||||
#endif
|
||||
#endif
|
||||
|
||||
static int __net_init vti_init_net(struct net *net)
|
||||
{
|
||||
|
||||
@@ -293,6 +293,7 @@ static const struct snmp_mib snmp4_net_list[] = {
|
||||
SNMP_MIB_ITEM("TcpTimeoutRehash", LINUX_MIB_TCPTIMEOUTREHASH),
|
||||
SNMP_MIB_ITEM("TcpDuplicateDataRehash", LINUX_MIB_TCPDUPLICATEDATAREHASH),
|
||||
SNMP_MIB_ITEM("TCPDSACKRecvSegs", LINUX_MIB_TCPDSACKRECVSEGS),
|
||||
SNMP_MIB_ITEM("TCPDSACKIgnoredDubious", LINUX_MIB_TCPDSACKIGNOREDDUBIOUS),
|
||||
SNMP_MIB_SENTINEL
|
||||
};
|
||||
|
||||
|
||||
@@ -214,7 +214,7 @@ struct sock *tcp_get_cookie_sock(struct sock *sk, struct sk_buff *skb,
|
||||
sock_rps_save_rxhash(child, skb);
|
||||
|
||||
if (rsk_drop_req(req)) {
|
||||
refcount_set(&req->rsk_refcnt, 2);
|
||||
reqsk_put(req);
|
||||
return child;
|
||||
}
|
||||
|
||||
|
||||
@@ -972,7 +972,8 @@ ssize_t do_tcp_sendpages(struct sock *sk, struct page *page, int offset,
|
||||
long timeo = sock_sndtimeo(sk, flags & MSG_DONTWAIT);
|
||||
|
||||
if (IS_ENABLED(CONFIG_DEBUG_VM) &&
|
||||
WARN_ONCE(PageSlab(page), "page must not be a Slab one"))
|
||||
WARN_ONCE(!sendpage_ok(page),
|
||||
"page must not be a Slab one and have page_count > 0"))
|
||||
return -EINVAL;
|
||||
|
||||
/* Wait for a connection to finish. One exception is TCP Fast Open
|
||||
|
||||
@@ -948,21 +948,34 @@ struct tcp_sacktag_state {
|
||||
struct rate_sample *rate;
|
||||
};
|
||||
|
||||
/* Take a notice that peer is sending D-SACKs */
|
||||
/* Take a notice that peer is sending D-SACKs. Skip update of data delivery
|
||||
* and spurious retransmission information if this DSACK is unlikely caused by
|
||||
* sender's action:
|
||||
* - DSACKed sequence range is larger than maximum receiver's window.
|
||||
* - Total no. of DSACKed segments exceed the total no. of retransmitted segs.
|
||||
*/
|
||||
static u32 tcp_dsack_seen(struct tcp_sock *tp, u32 start_seq,
|
||||
u32 end_seq, struct tcp_sacktag_state *state)
|
||||
{
|
||||
u32 seq_len, dup_segs = 1;
|
||||
|
||||
if (before(start_seq, end_seq)) {
|
||||
seq_len = end_seq - start_seq;
|
||||
if (seq_len > tp->mss_cache)
|
||||
dup_segs = DIV_ROUND_UP(seq_len, tp->mss_cache);
|
||||
}
|
||||
if (!before(start_seq, end_seq))
|
||||
return 0;
|
||||
|
||||
seq_len = end_seq - start_seq;
|
||||
/* Dubious DSACK: DSACKed range greater than maximum advertised rwnd */
|
||||
if (seq_len > tp->max_window)
|
||||
return 0;
|
||||
if (seq_len > tp->mss_cache)
|
||||
dup_segs = DIV_ROUND_UP(seq_len, tp->mss_cache);
|
||||
|
||||
tp->dsack_dups += dup_segs;
|
||||
/* Skip the DSACK if dup segs weren't retransmitted by sender */
|
||||
if (tp->dsack_dups > tp->total_retrans)
|
||||
return 0;
|
||||
|
||||
tp->rx_opt.sack_ok |= TCP_DSACK_SEEN;
|
||||
tp->rack.dsack_seen = 1;
|
||||
tp->dsack_dups += dup_segs;
|
||||
|
||||
state->flag |= FLAG_DSACKING_ACK;
|
||||
/* A spurious retransmission is delivered */
|
||||
@@ -1215,6 +1228,11 @@ static bool tcp_check_dsack(struct sock *sk, const struct sk_buff *ack_skb,
|
||||
}
|
||||
|
||||
dup_segs = tcp_dsack_seen(tp, start_seq_0, end_seq_0, state);
|
||||
if (!dup_segs) { /* Skip dubious DSACK */
|
||||
NET_INC_STATS(sock_net(sk), LINUX_MIB_TCPDSACKIGNOREDDUBIOUS);
|
||||
return false;
|
||||
}
|
||||
|
||||
NET_ADD_STATS(sock_net(sk), LINUX_MIB_TCPDSACKRECVSEGS, dup_segs);
|
||||
|
||||
/* D-SACK for already forgotten data... Do dumb counting. */
|
||||
|
||||
Reference in New Issue
Block a user