macvlan: Fix rx counters update in macvlan_handle_frame()
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>
This commit is contained in:
committed by
David S. Miller
parent
bb7e95c8fd
commit
ba01877f56
@@ -158,7 +158,8 @@ static struct sk_buff *macvlan_handle_frame(struct sk_buff *skb)
|
|||||||
const struct macvlan_dev *vlan;
|
const struct macvlan_dev *vlan;
|
||||||
const struct macvlan_dev *src;
|
const struct macvlan_dev *src;
|
||||||
struct net_device *dev;
|
struct net_device *dev;
|
||||||
unsigned int len;
|
unsigned int len = 0;
|
||||||
|
int ret = NET_RX_DROP;
|
||||||
|
|
||||||
port = macvlan_port_get_rcu(skb->dev);
|
port = macvlan_port_get_rcu(skb->dev);
|
||||||
if (is_multicast_ether_addr(eth->h_dest)) {
|
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;
|
len = skb->len + ETH_HLEN;
|
||||||
skb = skb_share_check(skb, GFP_ATOMIC);
|
skb = skb_share_check(skb, GFP_ATOMIC);
|
||||||
macvlan_count_rx(vlan, len, skb != NULL, 0);
|
|
||||||
if (!skb)
|
if (!skb)
|
||||||
return NULL;
|
goto out;
|
||||||
|
|
||||||
skb->dev = dev;
|
skb->dev = dev;
|
||||||
skb->pkt_type = PACKET_HOST;
|
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;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user