aboutsummaryrefslogtreecommitdiffstats
path: root/net/ipv6
diff options
context:
space:
mode:
authorEric Dumazet <eric.dumazet@gmail.com>2010-09-19 20:12:11 -0400
committerDavid S. Miller <davem@davemloft.net>2010-09-20 13:08:58 -0400
commit8990f468ae9010ab0af4be8f51bf7ab833a67202 (patch)
treee84ad358ed67da6011b1e20f3d8039d1f9f07e4a /net/ipv6
parent462fb2af9788a82a534f8184abfde31574e1cfa0 (diff)
net: rx_dropped accounting
Under load, netif_rx() can drop incoming packets but administrators dont have a chance to spot which device needs some tuning (RPS activation for example) This patch adds rx_dropped accounting in vlans and tunnels. Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ipv6')
-rw-r--r--net/ipv6/ip6_tunnel.c5
-rw-r--r--net/ipv6/ip6mr.c4
-rw-r--r--net/ipv6/sit.c5
3 files changed, 11 insertions, 3 deletions
diff --git a/net/ipv6/ip6_tunnel.c b/net/ipv6/ip6_tunnel.c
index 9289cecac4de..f6d9f683543e 100644
--- a/net/ipv6/ip6_tunnel.c
+++ b/net/ipv6/ip6_tunnel.c
@@ -725,7 +725,10 @@ static int ip6_tnl_rcv(struct sk_buff *skb, __u16 protocol,
725 skb_tunnel_rx(skb, t->dev); 725 skb_tunnel_rx(skb, t->dev);
726 726
727 dscp_ecn_decapsulate(t, ipv6h, skb); 727 dscp_ecn_decapsulate(t, ipv6h, skb);
728 netif_rx(skb); 728
729 if (netif_rx(skb) == NET_RX_DROP)
730 t->dev->stats.rx_dropped++;
731
729 rcu_read_unlock(); 732 rcu_read_unlock();
730 return 0; 733 return 0;
731 } 734 }
diff --git a/net/ipv6/ip6mr.c b/net/ipv6/ip6mr.c
index 66078dad7fe8..2640c9be589d 100644
--- a/net/ipv6/ip6mr.c
+++ b/net/ipv6/ip6mr.c
@@ -666,7 +666,9 @@ static int pim6_rcv(struct sk_buff *skb)
666 666
667 skb_tunnel_rx(skb, reg_dev); 667 skb_tunnel_rx(skb, reg_dev);
668 668
669 netif_rx(skb); 669 if (netif_rx(skb) == NET_RX_DROP)
670 reg_dev->stats.rx_dropped++;
671
670 dev_put(reg_dev); 672 dev_put(reg_dev);
671 return 0; 673 return 0;
672 drop: 674 drop:
diff --git a/net/ipv6/sit.c b/net/ipv6/sit.c
index 6822481ff766..8a0399822230 100644
--- a/net/ipv6/sit.c
+++ b/net/ipv6/sit.c
@@ -564,7 +564,10 @@ static int ipip6_rcv(struct sk_buff *skb)
564 skb_tunnel_rx(skb, tunnel->dev); 564 skb_tunnel_rx(skb, tunnel->dev);
565 565
566 ipip6_ecn_decapsulate(iph, skb); 566 ipip6_ecn_decapsulate(iph, skb);
567 netif_rx(skb); 567
568 if (netif_rx(skb) == NET_RX_DROP)
569 tunnel->dev->stats.rx_dropped++;
570
568 rcu_read_unlock(); 571 rcu_read_unlock();
569 return 0; 572 return 0;
570 } 573 }