diff options
author | Dave Airlie <airlied@redhat.com> | 2017-04-10 17:40:42 -0400 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2017-04-10 17:40:42 -0400 |
commit | b769fefb68cd70385d68220ae341e5a10723fbc0 (patch) | |
tree | a2881410c9dc5a3474619d155fac981cfbd4ee8f /net/ipv4 | |
parent | 1420f63b8207e966f54caec26d08abdc2ff37193 (diff) | |
parent | 39da7c509acff13fc8cb12ec1bb20337c988ed36 (diff) |
Backmerge tag 'v4.11-rc6' into drm-next
Linux 4.11-rc6
drm-misc needs 4.11-rc5, may as well fix conflicts with rc6.
Diffstat (limited to 'net/ipv4')
-rw-r--r-- | net/ipv4/ipconfig.c | 2 | ||||
-rw-r--r-- | net/ipv4/netfilter/nf_nat_snmp_basic.c | 20 | ||||
-rw-r--r-- | net/ipv4/ping.c | 5 | ||||
-rw-r--r-- | net/ipv4/tcp_input.c | 41 | ||||
-rw-r--r-- | net/ipv4/tcp_recovery.c | 3 |
5 files changed, 31 insertions, 40 deletions
diff --git a/net/ipv4/ipconfig.c b/net/ipv4/ipconfig.c index fd9f34bbd740..dfb2ab2dd3c8 100644 --- a/net/ipv4/ipconfig.c +++ b/net/ipv4/ipconfig.c | |||
@@ -306,7 +306,7 @@ static void __init ic_close_devs(void) | |||
306 | while ((d = next)) { | 306 | while ((d = next)) { |
307 | next = d->next; | 307 | next = d->next; |
308 | dev = d->dev; | 308 | dev = d->dev; |
309 | if ((!ic_dev || dev != ic_dev->dev) && !netdev_uses_dsa(dev)) { | 309 | if (d != ic_dev && !netdev_uses_dsa(dev)) { |
310 | pr_debug("IP-Config: Downing %s\n", dev->name); | 310 | pr_debug("IP-Config: Downing %s\n", dev->name); |
311 | dev_change_flags(dev, d->flags); | 311 | dev_change_flags(dev, d->flags); |
312 | } | 312 | } |
diff --git a/net/ipv4/netfilter/nf_nat_snmp_basic.c b/net/ipv4/netfilter/nf_nat_snmp_basic.c index c9b52c361da2..53e49f5011d3 100644 --- a/net/ipv4/netfilter/nf_nat_snmp_basic.c +++ b/net/ipv4/netfilter/nf_nat_snmp_basic.c | |||
@@ -1260,16 +1260,6 @@ static const struct nf_conntrack_expect_policy snmp_exp_policy = { | |||
1260 | .timeout = 180, | 1260 | .timeout = 180, |
1261 | }; | 1261 | }; |
1262 | 1262 | ||
1263 | static struct nf_conntrack_helper snmp_helper __read_mostly = { | ||
1264 | .me = THIS_MODULE, | ||
1265 | .help = help, | ||
1266 | .expect_policy = &snmp_exp_policy, | ||
1267 | .name = "snmp", | ||
1268 | .tuple.src.l3num = AF_INET, | ||
1269 | .tuple.src.u.udp.port = cpu_to_be16(SNMP_PORT), | ||
1270 | .tuple.dst.protonum = IPPROTO_UDP, | ||
1271 | }; | ||
1272 | |||
1273 | static struct nf_conntrack_helper snmp_trap_helper __read_mostly = { | 1263 | static struct nf_conntrack_helper snmp_trap_helper __read_mostly = { |
1274 | .me = THIS_MODULE, | 1264 | .me = THIS_MODULE, |
1275 | .help = help, | 1265 | .help = help, |
@@ -1288,22 +1278,16 @@ static struct nf_conntrack_helper snmp_trap_helper __read_mostly = { | |||
1288 | 1278 | ||
1289 | static int __init nf_nat_snmp_basic_init(void) | 1279 | static int __init nf_nat_snmp_basic_init(void) |
1290 | { | 1280 | { |
1291 | int ret = 0; | ||
1292 | |||
1293 | BUG_ON(nf_nat_snmp_hook != NULL); | 1281 | BUG_ON(nf_nat_snmp_hook != NULL); |
1294 | RCU_INIT_POINTER(nf_nat_snmp_hook, help); | 1282 | RCU_INIT_POINTER(nf_nat_snmp_hook, help); |
1295 | 1283 | ||
1296 | ret = nf_conntrack_helper_register(&snmp_trap_helper); | 1284 | return nf_conntrack_helper_register(&snmp_trap_helper); |
1297 | if (ret < 0) { | ||
1298 | nf_conntrack_helper_unregister(&snmp_helper); | ||
1299 | return ret; | ||
1300 | } | ||
1301 | return ret; | ||
1302 | } | 1285 | } |
1303 | 1286 | ||
1304 | static void __exit nf_nat_snmp_basic_fini(void) | 1287 | static void __exit nf_nat_snmp_basic_fini(void) |
1305 | { | 1288 | { |
1306 | RCU_INIT_POINTER(nf_nat_snmp_hook, NULL); | 1289 | RCU_INIT_POINTER(nf_nat_snmp_hook, NULL); |
1290 | synchronize_rcu(); | ||
1307 | nf_conntrack_helper_unregister(&snmp_trap_helper); | 1291 | nf_conntrack_helper_unregister(&snmp_trap_helper); |
1308 | } | 1292 | } |
1309 | 1293 | ||
diff --git a/net/ipv4/ping.c b/net/ipv4/ping.c index 2af6244b83e2..ccfbce13a633 100644 --- a/net/ipv4/ping.c +++ b/net/ipv4/ping.c | |||
@@ -156,17 +156,18 @@ int ping_hash(struct sock *sk) | |||
156 | void ping_unhash(struct sock *sk) | 156 | void ping_unhash(struct sock *sk) |
157 | { | 157 | { |
158 | struct inet_sock *isk = inet_sk(sk); | 158 | struct inet_sock *isk = inet_sk(sk); |
159 | |||
159 | pr_debug("ping_unhash(isk=%p,isk->num=%u)\n", isk, isk->inet_num); | 160 | pr_debug("ping_unhash(isk=%p,isk->num=%u)\n", isk, isk->inet_num); |
161 | write_lock_bh(&ping_table.lock); | ||
160 | if (sk_hashed(sk)) { | 162 | if (sk_hashed(sk)) { |
161 | write_lock_bh(&ping_table.lock); | ||
162 | hlist_nulls_del(&sk->sk_nulls_node); | 163 | hlist_nulls_del(&sk->sk_nulls_node); |
163 | sk_nulls_node_init(&sk->sk_nulls_node); | 164 | sk_nulls_node_init(&sk->sk_nulls_node); |
164 | sock_put(sk); | 165 | sock_put(sk); |
165 | isk->inet_num = 0; | 166 | isk->inet_num = 0; |
166 | isk->inet_sport = 0; | 167 | isk->inet_sport = 0; |
167 | sock_prot_inuse_add(sock_net(sk), sk->sk_prot, -1); | 168 | sock_prot_inuse_add(sock_net(sk), sk->sk_prot, -1); |
168 | write_unlock_bh(&ping_table.lock); | ||
169 | } | 169 | } |
170 | write_unlock_bh(&ping_table.lock); | ||
170 | } | 171 | } |
171 | EXPORT_SYMBOL_GPL(ping_unhash); | 172 | EXPORT_SYMBOL_GPL(ping_unhash); |
172 | 173 | ||
diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c index c43119726a62..2c1f59386a7b 100644 --- a/net/ipv4/tcp_input.c +++ b/net/ipv4/tcp_input.c | |||
@@ -126,7 +126,8 @@ int sysctl_tcp_invalid_ratelimit __read_mostly = HZ/2; | |||
126 | #define REXMIT_LOST 1 /* retransmit packets marked lost */ | 126 | #define REXMIT_LOST 1 /* retransmit packets marked lost */ |
127 | #define REXMIT_NEW 2 /* FRTO-style transmit of unsent/new packets */ | 127 | #define REXMIT_NEW 2 /* FRTO-style transmit of unsent/new packets */ |
128 | 128 | ||
129 | static void tcp_gro_dev_warn(struct sock *sk, const struct sk_buff *skb) | 129 | static void tcp_gro_dev_warn(struct sock *sk, const struct sk_buff *skb, |
130 | unsigned int len) | ||
130 | { | 131 | { |
131 | static bool __once __read_mostly; | 132 | static bool __once __read_mostly; |
132 | 133 | ||
@@ -137,8 +138,9 @@ static void tcp_gro_dev_warn(struct sock *sk, const struct sk_buff *skb) | |||
137 | 138 | ||
138 | rcu_read_lock(); | 139 | rcu_read_lock(); |
139 | dev = dev_get_by_index_rcu(sock_net(sk), skb->skb_iif); | 140 | dev = dev_get_by_index_rcu(sock_net(sk), skb->skb_iif); |
140 | pr_warn("%s: Driver has suspect GRO implementation, TCP performance may be compromised.\n", | 141 | if (!dev || len >= dev->mtu) |
141 | dev ? dev->name : "Unknown driver"); | 142 | pr_warn("%s: Driver has suspect GRO implementation, TCP performance may be compromised.\n", |
143 | dev ? dev->name : "Unknown driver"); | ||
142 | rcu_read_unlock(); | 144 | rcu_read_unlock(); |
143 | } | 145 | } |
144 | } | 146 | } |
@@ -161,8 +163,10 @@ static void tcp_measure_rcv_mss(struct sock *sk, const struct sk_buff *skb) | |||
161 | if (len >= icsk->icsk_ack.rcv_mss) { | 163 | if (len >= icsk->icsk_ack.rcv_mss) { |
162 | icsk->icsk_ack.rcv_mss = min_t(unsigned int, len, | 164 | icsk->icsk_ack.rcv_mss = min_t(unsigned int, len, |
163 | tcp_sk(sk)->advmss); | 165 | tcp_sk(sk)->advmss); |
164 | if (unlikely(icsk->icsk_ack.rcv_mss != len)) | 166 | /* Account for possibly-removed options */ |
165 | tcp_gro_dev_warn(sk, skb); | 167 | if (unlikely(len > icsk->icsk_ack.rcv_mss + |
168 | MAX_TCP_OPTION_SPACE)) | ||
169 | tcp_gro_dev_warn(sk, skb, len); | ||
166 | } else { | 170 | } else { |
167 | /* Otherwise, we make more careful check taking into account, | 171 | /* Otherwise, we make more careful check taking into account, |
168 | * that SACKs block is variable. | 172 | * that SACKs block is variable. |
@@ -874,22 +878,11 @@ static void tcp_update_reordering(struct sock *sk, const int metric, | |||
874 | const int ts) | 878 | const int ts) |
875 | { | 879 | { |
876 | struct tcp_sock *tp = tcp_sk(sk); | 880 | struct tcp_sock *tp = tcp_sk(sk); |
877 | if (metric > tp->reordering) { | 881 | int mib_idx; |
878 | int mib_idx; | ||
879 | 882 | ||
883 | if (metric > tp->reordering) { | ||
880 | tp->reordering = min(sysctl_tcp_max_reordering, metric); | 884 | tp->reordering = min(sysctl_tcp_max_reordering, metric); |
881 | 885 | ||
882 | /* This exciting event is worth to be remembered. 8) */ | ||
883 | if (ts) | ||
884 | mib_idx = LINUX_MIB_TCPTSREORDER; | ||
885 | else if (tcp_is_reno(tp)) | ||
886 | mib_idx = LINUX_MIB_TCPRENOREORDER; | ||
887 | else if (tcp_is_fack(tp)) | ||
888 | mib_idx = LINUX_MIB_TCPFACKREORDER; | ||
889 | else | ||
890 | mib_idx = LINUX_MIB_TCPSACKREORDER; | ||
891 | |||
892 | NET_INC_STATS(sock_net(sk), mib_idx); | ||
893 | #if FASTRETRANS_DEBUG > 1 | 886 | #if FASTRETRANS_DEBUG > 1 |
894 | pr_debug("Disorder%d %d %u f%u s%u rr%d\n", | 887 | pr_debug("Disorder%d %d %u f%u s%u rr%d\n", |
895 | tp->rx_opt.sack_ok, inet_csk(sk)->icsk_ca_state, | 888 | 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, | |||
902 | } | 895 | } |
903 | 896 | ||
904 | tp->rack.reord = 1; | 897 | tp->rack.reord = 1; |
898 | |||
899 | /* This exciting event is worth to be remembered. 8) */ | ||
900 | if (ts) | ||
901 | mib_idx = LINUX_MIB_TCPTSREORDER; | ||
902 | else if (tcp_is_reno(tp)) | ||
903 | mib_idx = LINUX_MIB_TCPRENOREORDER; | ||
904 | else if (tcp_is_fack(tp)) | ||
905 | mib_idx = LINUX_MIB_TCPFACKREORDER; | ||
906 | else | ||
907 | mib_idx = LINUX_MIB_TCPSACKREORDER; | ||
908 | |||
909 | NET_INC_STATS(sock_net(sk), mib_idx); | ||
905 | } | 910 | } |
906 | 911 | ||
907 | /* This must be called before lost_out is incremented */ | 912 | /* This must be called before lost_out is incremented */ |
diff --git a/net/ipv4/tcp_recovery.c b/net/ipv4/tcp_recovery.c index 4ecb38ae8504..d8acbd9f477a 100644 --- a/net/ipv4/tcp_recovery.c +++ b/net/ipv4/tcp_recovery.c | |||
@@ -12,7 +12,8 @@ static void tcp_rack_mark_skb_lost(struct sock *sk, struct sk_buff *skb) | |||
12 | /* Account for retransmits that are lost again */ | 12 | /* Account for retransmits that are lost again */ |
13 | TCP_SKB_CB(skb)->sacked &= ~TCPCB_SACKED_RETRANS; | 13 | TCP_SKB_CB(skb)->sacked &= ~TCPCB_SACKED_RETRANS; |
14 | tp->retrans_out -= tcp_skb_pcount(skb); | 14 | tp->retrans_out -= tcp_skb_pcount(skb); |
15 | NET_INC_STATS(sock_net(sk), LINUX_MIB_TCPLOSTRETRANSMIT); | 15 | NET_ADD_STATS(sock_net(sk), LINUX_MIB_TCPLOSTRETRANSMIT, |
16 | tcp_skb_pcount(skb)); | ||
16 | } | 17 | } |
17 | } | 18 | } |
18 | 19 | ||