aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/net/udp.h4
-rw-r--r--net/ipv6/udp.c13
2 files changed, 9 insertions, 8 deletions
diff --git a/include/net/udp.h b/include/net/udp.h
index bb5b9ec85638..3e551592aa76 100644
--- a/include/net/udp.h
+++ b/include/net/udp.h
@@ -165,7 +165,7 @@ DECLARE_SNMP_STAT(struct udp_mib, udplite_stats_in6);
165 if (is_udplite) SNMP_INC_STATS_BH(udplite_statistics, field); \ 165 if (is_udplite) SNMP_INC_STATS_BH(udplite_statistics, field); \
166 else SNMP_INC_STATS_BH(udp_statistics, field); } while(0) 166 else SNMP_INC_STATS_BH(udp_statistics, field); } while(0)
167 167
168#define UDP6_INC_STATS_BH(field, is_udplite) do { \ 168#define UDP6_INC_STATS_BH(net, field, is_udplite) do { (void)net; \
169 if (is_udplite) SNMP_INC_STATS_BH(udplite_stats_in6, field); \ 169 if (is_udplite) SNMP_INC_STATS_BH(udplite_stats_in6, field); \
170 else SNMP_INC_STATS_BH(udp_stats_in6, field); } while(0) 170 else SNMP_INC_STATS_BH(udp_stats_in6, field); } while(0)
171#define UDP6_INC_STATS_USER(net, field, is_udplite) do { (void)net; \ 171#define UDP6_INC_STATS_USER(net, field, is_udplite) do { (void)net; \
@@ -178,7 +178,7 @@ DECLARE_SNMP_STAT(struct udp_mib, udplite_stats_in6);
178 if ((sk)->sk_family == AF_INET) \ 178 if ((sk)->sk_family == AF_INET) \
179 UDP_INC_STATS_BH(sock_net(sk), field, 0); \ 179 UDP_INC_STATS_BH(sock_net(sk), field, 0); \
180 else \ 180 else \
181 UDP6_INC_STATS_BH(field, 0); \ 181 UDP6_INC_STATS_BH(sock_net(sk), field, 0); \
182 } while (0); 182 } while (0);
183#else 183#else
184#define UDPX_INC_STATS_BH(sk, field) UDP_INC_STATS_BH(sock_net(sk), field, 0) 184#define UDPX_INC_STATS_BH(sk, field) UDP_INC_STATS_BH(sock_net(sk), field, 0)
diff --git a/net/ipv6/udp.c b/net/ipv6/udp.c
index 833f715e4bff..d1477b350f76 100644
--- a/net/ipv6/udp.c
+++ b/net/ipv6/udp.c
@@ -299,7 +299,8 @@ int udpv6_queue_rcv_skb(struct sock * sk, struct sk_buff *skb)
299 if ((rc = sock_queue_rcv_skb(sk,skb)) < 0) { 299 if ((rc = sock_queue_rcv_skb(sk,skb)) < 0) {
300 /* Note that an ENOMEM error is charged twice */ 300 /* Note that an ENOMEM error is charged twice */
301 if (rc == -ENOMEM) { 301 if (rc == -ENOMEM) {
302 UDP6_INC_STATS_BH(UDP_MIB_RCVBUFERRORS, is_udplite); 302 UDP6_INC_STATS_BH(sock_net(sk),
303 UDP_MIB_RCVBUFERRORS, is_udplite);
303 atomic_inc(&sk->sk_drops); 304 atomic_inc(&sk->sk_drops);
304 } 305 }
305 goto drop; 306 goto drop;
@@ -307,7 +308,7 @@ int udpv6_queue_rcv_skb(struct sock * sk, struct sk_buff *skb)
307 308
308 return 0; 309 return 0;
309drop: 310drop:
310 UDP6_INC_STATS_BH(UDP_MIB_INERRORS, is_udplite); 311 UDP6_INC_STATS_BH(sock_net(sk), UDP_MIB_INERRORS, is_udplite);
311 kfree_skb(skb); 312 kfree_skb(skb);
312 return -1; 313 return -1;
313} 314}
@@ -439,7 +440,7 @@ int __udp6_lib_rcv(struct sk_buff *skb, struct hlist_head udptable[],
439 struct net_device *dev = skb->dev; 440 struct net_device *dev = skb->dev;
440 struct in6_addr *saddr, *daddr; 441 struct in6_addr *saddr, *daddr;
441 u32 ulen = 0; 442 u32 ulen = 0;
442 struct net *net; 443 struct net *net = dev_net(skb->dev);
443 444
444 if (!pskb_may_pull(skb, sizeof(struct udphdr))) 445 if (!pskb_may_pull(skb, sizeof(struct udphdr)))
445 goto short_packet; 446 goto short_packet;
@@ -474,7 +475,6 @@ int __udp6_lib_rcv(struct sk_buff *skb, struct hlist_head udptable[],
474 if (udp6_csum_init(skb, uh, proto)) 475 if (udp6_csum_init(skb, uh, proto))
475 goto discard; 476 goto discard;
476 477
477 net = dev_net(skb->dev);
478 /* 478 /*
479 * Multicast receive code 479 * Multicast receive code
480 */ 480 */
@@ -497,7 +497,8 @@ int __udp6_lib_rcv(struct sk_buff *skb, struct hlist_head udptable[],
497 497
498 if (udp_lib_checksum_complete(skb)) 498 if (udp_lib_checksum_complete(skb))
499 goto discard; 499 goto discard;
500 UDP6_INC_STATS_BH(UDP_MIB_NOPORTS, proto == IPPROTO_UDPLITE); 500 UDP6_INC_STATS_BH(net, UDP_MIB_NOPORTS,
501 proto == IPPROTO_UDPLITE);
501 502
502 icmpv6_send(skb, ICMPV6_DEST_UNREACH, ICMPV6_PORT_UNREACH, 0, dev); 503 icmpv6_send(skb, ICMPV6_DEST_UNREACH, ICMPV6_PORT_UNREACH, 0, dev);
503 504
@@ -522,7 +523,7 @@ short_packet:
522 ulen, skb->len); 523 ulen, skb->len);
523 524
524discard: 525discard:
525 UDP6_INC_STATS_BH(UDP_MIB_INERRORS, proto == IPPROTO_UDPLITE); 526 UDP6_INC_STATS_BH(net, UDP_MIB_INERRORS, proto == IPPROTO_UDPLITE);
526 kfree_skb(skb); 527 kfree_skb(skb);
527 return 0; 528 return 0;
528} 529}