Commit 7c73a6faffae0bfae70639113aecf06af666e714

Authored by Pavel Emelyanov
Committed by David S. Miller
1 parent 5e38e27044

mib: add net to IP_INC_STATS_BH

Signed-off-by: Pavel Emelyanov <xemul@openvz.org>
Signed-off-by: David S. Miller <davem@davemloft.net>

Showing 12 changed files with 41 additions and 34 deletions Side-by-side Diff

... ... @@ -158,7 +158,7 @@
158 158 extern struct ipv4_config ipv4_config;
159 159 DECLARE_SNMP_STAT(struct ipstats_mib, ip_statistics);
160 160 #define IP_INC_STATS(net, field) do { (void)net; SNMP_INC_STATS(ip_statistics, field); } while (0)
161   -#define IP_INC_STATS_BH(field) SNMP_INC_STATS_BH(ip_statistics, field)
  161 +#define IP_INC_STATS_BH(net, field) do { (void)net; SNMP_INC_STATS_BH(ip_statistics, field); } while (0)
162 162 #define IP_ADD_STATS_BH(field, val) SNMP_ADD_STATS_BH(ip_statistics, field, val)
163 163 DECLARE_SNMP_STAT(struct linux_mib, net_statistics);
164 164 #define NET_INC_STATS(field) SNMP_INC_STATS(net_statistics, field)
... ... @@ -465,7 +465,7 @@
465 465  
466 466 security_skb_classify_flow(skb, &fl);
467 467 if (ip_route_output_flow(net, &rt, &fl, sk, 0)) {
468   - IP_INC_STATS_BH(IPSTATS_MIB_OUTNOROUTES);
  468 + IP_INC_STATS_BH(net, IPSTATS_MIB_OUTNOROUTES);
469 469 return NULL;
470 470 }
471 471  
... ... @@ -52,7 +52,7 @@
52 52 inet->sport, usin->sin_port, sk, 1);
53 53 if (err) {
54 54 if (err == -ENETUNREACH)
55   - IP_INC_STATS_BH(IPSTATS_MIB_OUTNOROUTES);
  55 + IP_INC_STATS_BH(sock_net(sk), IPSTATS_MIB_OUTNOROUTES);
56 56 return err;
57 57 }
58 58  
net/ipv4/inet_connection_sock.c
... ... @@ -342,12 +342,12 @@
342 342  
343 343 security_req_classify_flow(req, &fl);
344 344 if (ip_route_output_flow(net, &rt, &fl, sk, 0)) {
345   - IP_INC_STATS_BH(IPSTATS_MIB_OUTNOROUTES);
  345 + IP_INC_STATS_BH(net, IPSTATS_MIB_OUTNOROUTES);
346 346 return NULL;
347 347 }
348 348 if (opt && opt->is_strictroute && rt->rt_dst != rt->rt_gateway) {
349 349 ip_rt_put(rt);
350   - IP_INC_STATS_BH(IPSTATS_MIB_OUTNOROUTES);
  350 + IP_INC_STATS_BH(net, IPSTATS_MIB_OUTNOROUTES);
351 351 return NULL;
352 352 }
353 353 return &rt->u.dst;
net/ipv4/ip_forward.c
... ... @@ -42,7 +42,7 @@
42 42 {
43 43 struct ip_options * opt = &(IPCB(skb)->opt);
44 44  
45   - IP_INC_STATS_BH(IPSTATS_MIB_OUTFORWDATAGRAMS);
  45 + IP_INC_STATS_BH(dev_net(skb->dst->dev), IPSTATS_MIB_OUTFORWDATAGRAMS);
46 46  
47 47 if (unlikely(opt->optlen))
48 48 ip_forward_options(skb);
... ... @@ -123,7 +123,7 @@
123 123  
124 124 too_many_hops:
125 125 /* Tell the sender its packet died... */
126   - IP_INC_STATS_BH(IPSTATS_MIB_INHDRERRORS);
  126 + IP_INC_STATS_BH(dev_net(skb->dst->dev), IPSTATS_MIB_INHDRERRORS);
127 127 icmp_send(skb, ICMP_TIME_EXCEEDED, ICMP_EXC_TTL, 0);
128 128 drop:
129 129 kfree_skb(skb);
net/ipv4/ip_fragment.c
... ... @@ -199,8 +199,8 @@
199 199  
200 200 ipq_kill(qp);
201 201  
202   - IP_INC_STATS_BH(IPSTATS_MIB_REASMTIMEOUT);
203   - IP_INC_STATS_BH(IPSTATS_MIB_REASMFAILS);
  202 + IP_INC_STATS_BH(net, IPSTATS_MIB_REASMTIMEOUT);
  203 + IP_INC_STATS_BH(net, IPSTATS_MIB_REASMFAILS);
204 204  
205 205 if ((qp->q.last_in & INET_FRAG_FIRST_IN) && qp->q.fragments != NULL) {
206 206 struct sk_buff *head = qp->q.fragments;
... ... @@ -261,7 +261,10 @@
261 261 rc = qp->q.fragments && (end - start) > max;
262 262  
263 263 if (rc) {
264   - IP_INC_STATS_BH(IPSTATS_MIB_REASMFAILS);
  264 + struct net *net;
  265 +
  266 + net = container_of(qp->q.net, struct net, ipv4.frags);
  267 + IP_INC_STATS_BH(net, IPSTATS_MIB_REASMFAILS);
265 268 }
266 269  
267 270 return rc;
... ... @@ -545,7 +548,7 @@
545 548 iph = ip_hdr(head);
546 549 iph->frag_off = 0;
547 550 iph->tot_len = htons(len);
548   - IP_INC_STATS_BH(IPSTATS_MIB_REASMOKS);
  551 + IP_INC_STATS_BH(dev_net(dev), IPSTATS_MIB_REASMOKS);
549 552 qp->q.fragments = NULL;
550 553 return 0;
551 554  
... ... @@ -560,7 +563,7 @@
560 563 "Oversized IP packet from " NIPQUAD_FMT ".\n",
561 564 NIPQUAD(qp->saddr));
562 565 out_fail:
563   - IP_INC_STATS_BH(IPSTATS_MIB_REASMFAILS);
  566 + IP_INC_STATS_BH(dev_net(dev), IPSTATS_MIB_REASMFAILS);
564 567 return err;
565 568 }
566 569  
... ... @@ -571,7 +574,7 @@
571 574 struct net *net;
572 575  
573 576 net = skb->dev ? dev_net(skb->dev) : dev_net(skb->dst->dev);
574   - IP_INC_STATS_BH(IPSTATS_MIB_REASMREQDS);
  577 + IP_INC_STATS_BH(net, IPSTATS_MIB_REASMREQDS);
575 578  
576 579 /* Start by cleaning up the memory. */
577 580 if (atomic_read(&net->ipv4.frags.mem) > net->ipv4.frags.high_thresh)
... ... @@ -590,7 +593,7 @@
590 593 return ret;
591 594 }
592 595  
593   - IP_INC_STATS_BH(IPSTATS_MIB_REASMFAILS);
  596 + IP_INC_STATS_BH(net, IPSTATS_MIB_REASMFAILS);
594 597 kfree_skb(skb);
595 598 return -ENOMEM;
596 599 }
... ... @@ -230,16 +230,16 @@
230 230 protocol = -ret;
231 231 goto resubmit;
232 232 }
233   - IP_INC_STATS_BH(IPSTATS_MIB_INDELIVERS);
  233 + IP_INC_STATS_BH(net, IPSTATS_MIB_INDELIVERS);
234 234 } else {
235 235 if (!raw) {
236 236 if (xfrm4_policy_check(NULL, XFRM_POLICY_IN, skb)) {
237   - IP_INC_STATS_BH(IPSTATS_MIB_INUNKNOWNPROTOS);
  237 + IP_INC_STATS_BH(net, IPSTATS_MIB_INUNKNOWNPROTOS);
238 238 icmp_send(skb, ICMP_DEST_UNREACH,
239 239 ICMP_PROT_UNREACH, 0);
240 240 }
241 241 } else
242   - IP_INC_STATS_BH(IPSTATS_MIB_INDELIVERS);
  242 + IP_INC_STATS_BH(net, IPSTATS_MIB_INDELIVERS);
243 243 kfree_skb(skb);
244 244 }
245 245 }
... ... @@ -281,7 +281,7 @@
281 281 --ANK (980813)
282 282 */
283 283 if (skb_cow(skb, skb_headroom(skb))) {
284   - IP_INC_STATS_BH(IPSTATS_MIB_INDISCARDS);
  284 + IP_INC_STATS_BH(dev_net(dev), IPSTATS_MIB_INDISCARDS);
285 285 goto drop;
286 286 }
287 287  
... ... @@ -290,7 +290,7 @@
290 290 opt->optlen = iph->ihl*4 - sizeof(struct iphdr);
291 291  
292 292 if (ip_options_compile(dev_net(dev), opt, skb)) {
293   - IP_INC_STATS_BH(IPSTATS_MIB_INHDRERRORS);
  293 + IP_INC_STATS_BH(dev_net(dev), IPSTATS_MIB_INHDRERRORS);
294 294 goto drop;
295 295 }
296 296  
297 297  
... ... @@ -334,9 +334,11 @@
334 334 skb->dev);
335 335 if (unlikely(err)) {
336 336 if (err == -EHOSTUNREACH)
337   - IP_INC_STATS_BH(IPSTATS_MIB_INADDRERRORS);
  337 + IP_INC_STATS_BH(dev_net(skb->dev),
  338 + IPSTATS_MIB_INADDRERRORS);
338 339 else if (err == -ENETUNREACH)
339   - IP_INC_STATS_BH(IPSTATS_MIB_INNOROUTES);
  340 + IP_INC_STATS_BH(dev_net(skb->dev),
  341 + IPSTATS_MIB_INNOROUTES);
340 342 goto drop;
341 343 }
342 344 }
343 345  
... ... @@ -357,9 +359,9 @@
357 359  
358 360 rt = skb->rtable;
359 361 if (rt->rt_type == RTN_MULTICAST)
360   - IP_INC_STATS_BH(IPSTATS_MIB_INMCASTPKTS);
  362 + IP_INC_STATS_BH(dev_net(rt->u.dst.dev), IPSTATS_MIB_INMCASTPKTS);
361 363 else if (rt->rt_type == RTN_BROADCAST)
362   - IP_INC_STATS_BH(IPSTATS_MIB_INBCASTPKTS);
  364 + IP_INC_STATS_BH(dev_net(rt->u.dst.dev), IPSTATS_MIB_INBCASTPKTS);
363 365  
364 366 return dst_input(skb);
365 367  
366 368  
... ... @@ -382,10 +384,10 @@
382 384 if (skb->pkt_type == PACKET_OTHERHOST)
383 385 goto drop;
384 386  
385   - IP_INC_STATS_BH(IPSTATS_MIB_INRECEIVES);
  387 + IP_INC_STATS_BH(dev_net(dev), IPSTATS_MIB_INRECEIVES);
386 388  
387 389 if ((skb = skb_share_check(skb, GFP_ATOMIC)) == NULL) {
388   - IP_INC_STATS_BH(IPSTATS_MIB_INDISCARDS);
  390 + IP_INC_STATS_BH(dev_net(dev), IPSTATS_MIB_INDISCARDS);
389 391 goto out;
390 392 }
391 393  
... ... @@ -418,7 +420,7 @@
418 420  
419 421 len = ntohs(iph->tot_len);
420 422 if (skb->len < len) {
421   - IP_INC_STATS_BH(IPSTATS_MIB_INTRUNCATEDPKTS);
  423 + IP_INC_STATS_BH(dev_net(dev), IPSTATS_MIB_INTRUNCATEDPKTS);
422 424 goto drop;
423 425 } else if (len < (iph->ihl*4))
424 426 goto inhdr_error;
... ... @@ -428,7 +430,7 @@
428 430 * Note this now means skb->len holds ntohs(iph->tot_len).
429 431 */
430 432 if (pskb_trim_rcsum(skb, len)) {
431   - IP_INC_STATS_BH(IPSTATS_MIB_INDISCARDS);
  433 + IP_INC_STATS_BH(dev_net(dev), IPSTATS_MIB_INDISCARDS);
432 434 goto drop;
433 435 }
434 436  
... ... @@ -439,7 +441,7 @@
439 441 ip_rcv_finish);
440 442  
441 443 inhdr_error:
442   - IP_INC_STATS_BH(IPSTATS_MIB_INHDRERRORS);
  444 + IP_INC_STATS_BH(dev_net(dev), IPSTATS_MIB_INHDRERRORS);
443 445 drop:
444 446 kfree_skb(skb);
445 447 out:
... ... @@ -1178,7 +1178,7 @@
1178 1178 {
1179 1179 struct ip_options * opt = &(IPCB(skb)->opt);
1180 1180  
1181   - IP_INC_STATS_BH(IPSTATS_MIB_OUTFORWDATAGRAMS);
  1181 + IP_INC_STATS_BH(dev_net(skb->dst->dev), IPSTATS_MIB_OUTFORWDATAGRAMS);
1182 1182  
1183 1183 if (unlikely(opt->optlen))
1184 1184 ip_forward_options(skb);
... ... @@ -1241,7 +1241,7 @@
1241 1241 to blackhole.
1242 1242 */
1243 1243  
1244   - IP_INC_STATS_BH(IPSTATS_MIB_FRAGFAILS);
  1244 + IP_INC_STATS_BH(dev_net(dev), IPSTATS_MIB_FRAGFAILS);
1245 1245 ip_rt_put(rt);
1246 1246 goto out_free;
1247 1247 }
... ... @@ -1429,7 +1429,8 @@
1429 1429 break;
1430 1430 case ENETUNREACH:
1431 1431 code = ICMP_NET_UNREACH;
1432   - IP_INC_STATS_BH(IPSTATS_MIB_INNOROUTES);
  1432 + IP_INC_STATS_BH(dev_net(rt->u.dst.dev),
  1433 + IPSTATS_MIB_INNOROUTES);
1433 1434 break;
1434 1435 case EACCES:
1435 1436 code = ICMP_PKT_FILTERED;
... ... @@ -175,7 +175,7 @@
175 175 inet->sport, usin->sin_port, sk, 1);
176 176 if (tmp < 0) {
177 177 if (tmp == -ENETUNREACH)
178   - IP_INC_STATS_BH(IPSTATS_MIB_OUTNOROUTES);
  178 + IP_INC_STATS_BH(sock_net(sk), IPSTATS_MIB_OUTNOROUTES);
179 179 return tmp;
180 180 }
181 181  
... ... @@ -662,7 +662,7 @@
662 662 err = ip_route_output_flow(net, &rt, &fl, sk, 1);
663 663 if (err) {
664 664 if (err == -ENETUNREACH)
665   - IP_INC_STATS_BH(IPSTATS_MIB_OUTNOROUTES);
  665 + IP_INC_STATS_BH(net, IPSTATS_MIB_OUTNOROUTES);
666 666 goto out;
667 667 }
668 668  
... ... @@ -50,6 +50,7 @@
50 50 #include <linux/init.h>
51 51 #include <net/inet_ecn.h>
52 52 #include <net/icmp.h>
  53 +#include <net/net_namespace.h>
53 54  
54 55 #ifndef TEST_FRAME
55 56 #include <net/tcp.h>
... ... @@ -595,7 +596,7 @@
595 596 return err;
596 597 no_route:
597 598 kfree_skb(nskb);
598   - IP_INC_STATS_BH(IPSTATS_MIB_OUTNOROUTES);
  599 + IP_INC_STATS_BH(&init_net, IPSTATS_MIB_OUTNOROUTES);
599 600  
600 601 /* FIXME: Returning the 'err' will effect all the associations
601 602 * associated with a socket, although only one of the paths of the