aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPavel Emelyanov <xemul@openvz.org>2008-05-21 17:13:47 -0400
committerDavid S. Miller <davem@davemloft.net>2008-05-21 17:13:47 -0400
commita339f1c881fdb8092ef9b118610307e10e885fc8 (patch)
tree117feec8162165b577d7030262da66e8ac6a5e83
parent96e74088f1da4d9a53735a4a57a4f984f86b75c6 (diff)
bridge: Use on-device stats instead of private ones.
Even though bridges require 6 fields from struct net_device_stats, the on-device stats are always there, so we may just use them. The br_dev_get_stats is no longer required after this. Signed-off-by: Pavel Emelyanov <xemul@openvz.org> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--net/bridge/br_device.c11
-rw-r--r--net/bridge/br_forward.c2
-rw-r--r--net/bridge/br_input.c10
-rw-r--r--net/bridge/br_private.h1
4 files changed, 8 insertions, 16 deletions
diff --git a/net/bridge/br_device.c b/net/bridge/br_device.c
index bf7787395fe0..626c7795ae30 100644
--- a/net/bridge/br_device.c
+++ b/net/bridge/br_device.c
@@ -21,12 +21,6 @@
21#include <asm/uaccess.h> 21#include <asm/uaccess.h>
22#include "br_private.h" 22#include "br_private.h"
23 23
24static struct net_device_stats *br_dev_get_stats(struct net_device *dev)
25{
26 struct net_bridge *br = netdev_priv(dev);
27 return &br->statistics;
28}
29
30/* net device transmit always called with no BH (preempt_disabled) */ 24/* net device transmit always called with no BH (preempt_disabled) */
31int br_dev_xmit(struct sk_buff *skb, struct net_device *dev) 25int br_dev_xmit(struct sk_buff *skb, struct net_device *dev)
32{ 26{
@@ -34,8 +28,8 @@ int br_dev_xmit(struct sk_buff *skb, struct net_device *dev)
34 const unsigned char *dest = skb->data; 28 const unsigned char *dest = skb->data;
35 struct net_bridge_fdb_entry *dst; 29 struct net_bridge_fdb_entry *dst;
36 30
37 br->statistics.tx_packets++; 31 dev->stats.tx_packets++;
38 br->statistics.tx_bytes += skb->len; 32 dev->stats.tx_bytes += skb->len;
39 33
40 skb_reset_mac_header(skb); 34 skb_reset_mac_header(skb);
41 skb_pull(skb, ETH_HLEN); 35 skb_pull(skb, ETH_HLEN);
@@ -161,7 +155,6 @@ void br_dev_setup(struct net_device *dev)
161 ether_setup(dev); 155 ether_setup(dev);
162 156
163 dev->do_ioctl = br_dev_ioctl; 157 dev->do_ioctl = br_dev_ioctl;
164 dev->get_stats = br_dev_get_stats;
165 dev->hard_start_xmit = br_dev_xmit; 158 dev->hard_start_xmit = br_dev_xmit;
166 dev->open = br_dev_open; 159 dev->open = br_dev_open;
167 dev->set_multicast_list = br_dev_set_multicast_list; 160 dev->set_multicast_list = br_dev_set_multicast_list;
diff --git a/net/bridge/br_forward.c b/net/bridge/br_forward.c
index bdd7c35c3c7b..a4711674b3df 100644
--- a/net/bridge/br_forward.c
+++ b/net/bridge/br_forward.c
@@ -115,7 +115,7 @@ static void br_flood(struct net_bridge *br, struct sk_buff *skb,
115 struct sk_buff *skb2; 115 struct sk_buff *skb2;
116 116
117 if ((skb2 = skb_clone(skb, GFP_ATOMIC)) == NULL) { 117 if ((skb2 = skb_clone(skb, GFP_ATOMIC)) == NULL) {
118 br->statistics.tx_dropped++; 118 br->dev->stats.tx_dropped++;
119 kfree_skb(skb); 119 kfree_skb(skb);
120 return; 120 return;
121 } 121 }
diff --git a/net/bridge/br_input.c b/net/bridge/br_input.c
index 255c00f60ce7..fa0f5711a996 100644
--- a/net/bridge/br_input.c
+++ b/net/bridge/br_input.c
@@ -24,13 +24,13 @@ const u8 br_group_address[ETH_ALEN] = { 0x01, 0x80, 0xc2, 0x00, 0x00, 0x00 };
24 24
25static void br_pass_frame_up(struct net_bridge *br, struct sk_buff *skb) 25static void br_pass_frame_up(struct net_bridge *br, struct sk_buff *skb)
26{ 26{
27 struct net_device *indev; 27 struct net_device *indev, *brdev = br->dev;
28 28
29 br->statistics.rx_packets++; 29 brdev->stats.rx_packets++;
30 br->statistics.rx_bytes += skb->len; 30 brdev->stats.rx_bytes += skb->len;
31 31
32 indev = skb->dev; 32 indev = skb->dev;
33 skb->dev = br->dev; 33 skb->dev = brdev;
34 34
35 NF_HOOK(PF_BRIDGE, NF_BR_LOCAL_IN, skb, indev, NULL, 35 NF_HOOK(PF_BRIDGE, NF_BR_LOCAL_IN, skb, indev, NULL,
36 netif_receive_skb); 36 netif_receive_skb);
@@ -64,7 +64,7 @@ int br_handle_frame_finish(struct sk_buff *skb)
64 dst = NULL; 64 dst = NULL;
65 65
66 if (is_multicast_ether_addr(dest)) { 66 if (is_multicast_ether_addr(dest)) {
67 br->statistics.multicast++; 67 br->dev->stats.multicast++;
68 skb2 = skb; 68 skb2 = skb;
69 } else if ((dst = __br_fdb_get(br, dest)) && dst->is_local) { 69 } else if ((dst = __br_fdb_get(br, dest)) && dst->is_local) {
70 skb2 = skb; 70 skb2 = skb;
diff --git a/net/bridge/br_private.h b/net/bridge/br_private.h
index c11b554fd109..0243cb489edd 100644
--- a/net/bridge/br_private.h
+++ b/net/bridge/br_private.h
@@ -90,7 +90,6 @@ struct net_bridge
90 spinlock_t lock; 90 spinlock_t lock;
91 struct list_head port_list; 91 struct list_head port_list;
92 struct net_device *dev; 92 struct net_device *dev;
93 struct net_device_stats statistics;
94 spinlock_t hash_lock; 93 spinlock_t hash_lock;
95 struct hlist_head hash[BR_HASH_SIZE]; 94 struct hlist_head hash[BR_HASH_SIZE];
96 struct list_head age_list; 95 struct list_head age_list;