diff options
author | Eric Dumazet <eric.dumazet@gmail.com> | 2010-09-19 20:12:11 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2010-09-20 13:08:58 -0400 |
commit | 8990f468ae9010ab0af4be8f51bf7ab833a67202 (patch) | |
tree | e84ad358ed67da6011b1e20f3d8039d1f9f07e4a /net/8021q | |
parent | 462fb2af9788a82a534f8184abfde31574e1cfa0 (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/8021q')
-rw-r--r-- | net/8021q/vlan.h | 2 | ||||
-rw-r--r-- | net/8021q/vlan_dev.c | 9 |
2 files changed, 9 insertions, 2 deletions
diff --git a/net/8021q/vlan.h b/net/8021q/vlan.h index 8d9503ad01da..b26ce343072c 100644 --- a/net/8021q/vlan.h +++ b/net/8021q/vlan.h | |||
@@ -25,6 +25,7 @@ struct vlan_priority_tci_mapping { | |||
25 | * @rx_multicast: number of received multicast packets | 25 | * @rx_multicast: number of received multicast packets |
26 | * @syncp: synchronization point for 64bit counters | 26 | * @syncp: synchronization point for 64bit counters |
27 | * @rx_errors: number of errors | 27 | * @rx_errors: number of errors |
28 | * @rx_dropped: number of dropped packets | ||
28 | */ | 29 | */ |
29 | struct vlan_rx_stats { | 30 | struct vlan_rx_stats { |
30 | u64 rx_packets; | 31 | u64 rx_packets; |
@@ -32,6 +33,7 @@ struct vlan_rx_stats { | |||
32 | u64 rx_multicast; | 33 | u64 rx_multicast; |
33 | struct u64_stats_sync syncp; | 34 | struct u64_stats_sync syncp; |
34 | unsigned long rx_errors; | 35 | unsigned long rx_errors; |
36 | unsigned long rx_dropped; | ||
35 | }; | 37 | }; |
36 | 38 | ||
37 | /** | 39 | /** |
diff --git a/net/8021q/vlan_dev.c b/net/8021q/vlan_dev.c index 3bccdd12a264..94a1feddeb49 100644 --- a/net/8021q/vlan_dev.c +++ b/net/8021q/vlan_dev.c | |||
@@ -225,7 +225,10 @@ int vlan_skb_recv(struct sk_buff *skb, struct net_device *dev, | |||
225 | } | 225 | } |
226 | } | 226 | } |
227 | 227 | ||
228 | netif_rx(skb); | 228 | if (unlikely(netif_rx(skb) == NET_RX_DROP)) { |
229 | if (rx_stats) | ||
230 | rx_stats->rx_dropped++; | ||
231 | } | ||
229 | rcu_read_unlock(); | 232 | rcu_read_unlock(); |
230 | return NET_RX_SUCCESS; | 233 | return NET_RX_SUCCESS; |
231 | 234 | ||
@@ -843,13 +846,15 @@ static struct rtnl_link_stats64 *vlan_dev_get_stats64(struct net_device *dev, st | |||
843 | accum.rx_packets += rxpackets; | 846 | accum.rx_packets += rxpackets; |
844 | accum.rx_bytes += rxbytes; | 847 | accum.rx_bytes += rxbytes; |
845 | accum.rx_multicast += rxmulticast; | 848 | accum.rx_multicast += rxmulticast; |
846 | /* rx_errors is an ulong, not protected by syncp */ | 849 | /* rx_errors, rx_dropped are ulong, not protected by syncp */ |
847 | accum.rx_errors += p->rx_errors; | 850 | accum.rx_errors += p->rx_errors; |
851 | accum.rx_dropped += p->rx_dropped; | ||
848 | } | 852 | } |
849 | stats->rx_packets = accum.rx_packets; | 853 | stats->rx_packets = accum.rx_packets; |
850 | stats->rx_bytes = accum.rx_bytes; | 854 | stats->rx_bytes = accum.rx_bytes; |
851 | stats->rx_errors = accum.rx_errors; | 855 | stats->rx_errors = accum.rx_errors; |
852 | stats->multicast = accum.rx_multicast; | 856 | stats->multicast = accum.rx_multicast; |
857 | stats->rx_dropped = accum.rx_dropped; | ||
853 | } | 858 | } |
854 | return stats; | 859 | return stats; |
855 | } | 860 | } |