macvlan: Fix rx counters update in macvlan_handle_frame()
authorSridhar Samudrala <sri@us.ibm.com>
Tue, 27 Jul 2010 09:10:07 +0000 (09:10 +0000)
committerDavid S. Miller <davem@davemloft.net>
Wed, 28 Jul 2010 04:02:42 +0000 (21:02 -0700)
Fix macvlan_handle_frame() to update the rx counters based
on the return value of the vlan->receive call.

Updated the patch to not do any packet count drops when the interface
is down based on Herber'ts comments.

Signed-off-by: Sridhar Samudrala <sri@us.ibm.com>
Acked-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/macvlan.c

index 6e9da96a87b289e6b193680f489538c76b783bf5..0ef0eb0db94564dda7d0c7f28c7581db799e0e7a 100644 (file)
@@ -158,7 +158,8 @@ static struct sk_buff *macvlan_handle_frame(struct sk_buff *skb)
        const struct macvlan_dev *vlan;
        const struct macvlan_dev *src;
        struct net_device *dev;
-       unsigned int len;
+       unsigned int len = 0;
+       int ret = NET_RX_DROP;
 
        port = macvlan_port_get_rcu(skb->dev);
        if (is_multicast_ether_addr(eth->h_dest)) {
@@ -195,14 +196,16 @@ static struct sk_buff *macvlan_handle_frame(struct sk_buff *skb)
        }
        len = skb->len + ETH_HLEN;
        skb = skb_share_check(skb, GFP_ATOMIC);
-       macvlan_count_rx(vlan, len, skb != NULL, 0);
        if (!skb)
-               return NULL;
+               goto out;
 
        skb->dev = dev;
        skb->pkt_type = PACKET_HOST;
 
-       vlan->receive(skb);
+       ret = vlan->receive(skb);
+
+out:
+       macvlan_count_rx(vlan, len, ret == NET_RX_SUCCESS, 0);
        return NULL;
 }