bridge: Use BR_INPUT_SKB_CB on xmit path
authorHerbert Xu <herbert@gondor.apana.org.au>
Sat, 27 Feb 2010 19:41:42 +0000 (19:41 +0000)
committerDavid S. Miller <davem@davemloft.net>
Sun, 28 Feb 2010 08:48:44 +0000 (00:48 -0800)
this patch makes BR_INPUT_SKB_CB available on the xmit path so
that we could avoid passing the br pointer around for the purpose
of collecting device statistics.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/bridge/br_device.c
net/bridge/br_forward.c

index 1a99c4e..be35629 100644 (file)
@@ -26,6 +26,8 @@ netdev_tx_t br_dev_xmit(struct sk_buff *skb, struct net_device *dev)
        const unsigned char *dest = skb->data;
        struct net_bridge_fdb_entry *dst;
 
+       BR_INPUT_SKB_CB(skb)->brdev = dev;
+
        dev->stats.tx_packets++;
        dev->stats.tx_bytes += skb->len;
 
index 6cd50c6..2e1cb43 100644 (file)
@@ -111,6 +111,7 @@ static void br_flood(struct net_bridge *br, struct sk_buff *skb,
 {
        struct net_bridge_port *p;
        struct net_bridge_port *prev;
+       struct net_device *dev = BR_INPUT_SKB_CB(skb)->brdev;
 
        prev = NULL;
 
@@ -120,7 +121,7 @@ static void br_flood(struct net_bridge *br, struct sk_buff *skb,
                                struct sk_buff *skb2;
 
                                if ((skb2 = skb_clone(skb, GFP_ATOMIC)) == NULL) {
-                                       br->dev->stats.tx_dropped++;
+                                       dev->stats.tx_dropped++;
                                        goto out;
                                }
 
@@ -137,7 +138,7 @@ static void br_flood(struct net_bridge *br, struct sk_buff *skb,
        if (skb0) {
                skb = skb_clone(skb, GFP_ATOMIC);
                if (!skb) {
-                       br->dev->stats.tx_dropped++;
+                       dev->stats.tx_dropped++;
                        goto out;
                }
        }