diff options
-rw-r--r-- | include/uapi/linux/snmp.h | 1 | ||||
-rw-r--r-- | net/ipv4/proc.c | 1 | ||||
-rw-r--r-- | net/ipv4/tcp_output.c | 7 |
3 files changed, 9 insertions, 0 deletions
diff --git a/include/uapi/linux/snmp.h b/include/uapi/linux/snmp.h index e00013a1debc..fefdec91c68b 100644 --- a/include/uapi/linux/snmp.h +++ b/include/uapi/linux/snmp.h | |||
@@ -247,6 +247,7 @@ enum | |||
247 | LINUX_MIB_TCPFASTOPENPASSIVEFAIL, /* TCPFastOpenPassiveFail */ | 247 | LINUX_MIB_TCPFASTOPENPASSIVEFAIL, /* TCPFastOpenPassiveFail */ |
248 | LINUX_MIB_TCPFASTOPENLISTENOVERFLOW, /* TCPFastOpenListenOverflow */ | 248 | LINUX_MIB_TCPFASTOPENLISTENOVERFLOW, /* TCPFastOpenListenOverflow */ |
249 | LINUX_MIB_TCPFASTOPENCOOKIEREQD, /* TCPFastOpenCookieReqd */ | 249 | LINUX_MIB_TCPFASTOPENCOOKIEREQD, /* TCPFastOpenCookieReqd */ |
250 | LINUX_MIB_TCPSPURIOUS_RTX_HOSTQUEUES, /* TCPSpuriousRtxHostQueues */ | ||
250 | __LINUX_MIB_MAX | 251 | __LINUX_MIB_MAX |
251 | }; | 252 | }; |
252 | 253 | ||
diff --git a/net/ipv4/proc.c b/net/ipv4/proc.c index b6f2ea174898..6da51d55d03a 100644 --- a/net/ipv4/proc.c +++ b/net/ipv4/proc.c | |||
@@ -269,6 +269,7 @@ static const struct snmp_mib snmp4_net_list[] = { | |||
269 | SNMP_MIB_ITEM("TCPFastOpenPassiveFail", LINUX_MIB_TCPFASTOPENPASSIVEFAIL), | 269 | SNMP_MIB_ITEM("TCPFastOpenPassiveFail", LINUX_MIB_TCPFASTOPENPASSIVEFAIL), |
270 | SNMP_MIB_ITEM("TCPFastOpenListenOverflow", LINUX_MIB_TCPFASTOPENLISTENOVERFLOW), | 270 | SNMP_MIB_ITEM("TCPFastOpenListenOverflow", LINUX_MIB_TCPFASTOPENLISTENOVERFLOW), |
271 | SNMP_MIB_ITEM("TCPFastOpenCookieReqd", LINUX_MIB_TCPFASTOPENCOOKIEREQD), | 271 | SNMP_MIB_ITEM("TCPFastOpenCookieReqd", LINUX_MIB_TCPFASTOPENCOOKIEREQD), |
272 | SNMP_MIB_ITEM("TCPSpuriousRtxHostQueues", LINUX_MIB_TCPSPURIOUS_RTX_HOSTQUEUES), | ||
272 | SNMP_MIB_SENTINEL | 273 | SNMP_MIB_SENTINEL |
273 | }; | 274 | }; |
274 | 275 | ||
diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c index d12694353540..5f28131eb37e 100644 --- a/net/ipv4/tcp_output.c +++ b/net/ipv4/tcp_output.c | |||
@@ -846,6 +846,13 @@ static int tcp_transmit_skb(struct sock *sk, struct sk_buff *skb, int clone_it, | |||
846 | __net_timestamp(skb); | 846 | __net_timestamp(skb); |
847 | 847 | ||
848 | if (likely(clone_it)) { | 848 | if (likely(clone_it)) { |
849 | const struct sk_buff *fclone = skb + 1; | ||
850 | |||
851 | if (unlikely(skb->fclone == SKB_FCLONE_ORIG && | ||
852 | fclone->fclone == SKB_FCLONE_CLONE)) | ||
853 | NET_INC_STATS_BH(sock_net(sk), | ||
854 | LINUX_MIB_TCPSPURIOUS_RTX_HOSTQUEUES); | ||
855 | |||
849 | if (unlikely(skb_cloned(skb))) | 856 | if (unlikely(skb_cloned(skb))) |
850 | skb = pskb_copy(skb, gfp_mask); | 857 | skb = pskb_copy(skb, gfp_mask); |
851 | else | 858 | else |