]> bbs.cooldavid.org Git - net-next-2.6.git/blobdiff - net/8021q/vlan_core.c
vlan: 64 bit rx counters
[net-next-2.6.git] / net / 8021q / vlan_core.c
index bd537fc10254c9fbb6cf3872e8488bba1809781b..1b9406a31f0c3dde95df11f889c0aa514e0b72ca 100644 (file)
@@ -12,7 +12,7 @@ int __vlan_hwaccel_rx(struct sk_buff *skb, struct vlan_group *grp,
                return NET_RX_DROP;
 
        if (skb_bond_should_drop(skb, ACCESS_ONCE(skb->dev->master)))
-               goto drop;
+               skb->deliver_no_wcard = 1;
 
        skb->skb_iif = skb->dev->ifindex;
        __vlan_hwaccel_put_tag(skb, vlan_tci);
@@ -41,9 +41,9 @@ int vlan_hwaccel_do_receive(struct sk_buff *skb)
        skb->priority = vlan_get_ingress_priority(dev, skb->vlan_tci);
        skb->vlan_tci = 0;
 
-       rx_stats = per_cpu_ptr(vlan_dev_info(dev)->vlan_rx_stats,
-                              smp_processor_id());
+       rx_stats = this_cpu_ptr(vlan_dev_info(dev)->vlan_rx_stats);
 
+       u64_stats_update_begin(&rx_stats->syncp);
        rx_stats->rx_packets++;
        rx_stats->rx_bytes += skb->len;
 
@@ -51,7 +51,7 @@ int vlan_hwaccel_do_receive(struct sk_buff *skb)
        case PACKET_BROADCAST:
                break;
        case PACKET_MULTICAST:
-               rx_stats->multicast++;
+               rx_stats->rx_multicast++;
                break;
        case PACKET_OTHERHOST:
                /* Our lower layer thinks this is not local, let's make sure.
@@ -62,6 +62,7 @@ int vlan_hwaccel_do_receive(struct sk_buff *skb)
                        skb->pkt_type = PACKET_HOST;
                break;
        }
+       u64_stats_update_end(&rx_stats->syncp);
        return 0;
 }
 
@@ -84,7 +85,7 @@ vlan_gro_common(struct napi_struct *napi, struct vlan_group *grp,
        struct sk_buff *p;
 
        if (skb_bond_should_drop(skb, ACCESS_ONCE(skb->dev->master)))
-               goto drop;
+               skb->deliver_no_wcard = 1;
 
        skb->skb_iif = skb->dev->ifindex;
        __vlan_hwaccel_put_tag(skb, vlan_tci);