macvlan: Move skb_clone check closer to call
Currently macvlan calls skb_clone in macvlan_broadcast but checks for a NULL return in macvlan_broadcast_one instead. This is needlessly confusing and may lead to bugs introduced later. This patch moves the error check to where the skb_clone call is. The only other caller of macvlan_broadcast_one never passes in a NULL value so it doesn't need the check either. Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au> Thanks, Reviewed-by: Simon Horman <horms@verge.net.au> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
97f3f6fc23
commit
de9e8f3f40
|
@ -118,8 +118,6 @@ static int macvlan_broadcast_one(struct sk_buff *skb,
|
||||||
const struct ethhdr *eth, bool local)
|
const struct ethhdr *eth, bool local)
|
||||||
{
|
{
|
||||||
struct net_device *dev = vlan->dev;
|
struct net_device *dev = vlan->dev;
|
||||||
if (!skb)
|
|
||||||
return NET_RX_DROP;
|
|
||||||
|
|
||||||
if (local)
|
if (local)
|
||||||
return vlan->forward(dev, skb);
|
return vlan->forward(dev, skb);
|
||||||
|
@ -171,9 +169,13 @@ static void macvlan_broadcast(struct sk_buff *skb,
|
||||||
hash = mc_hash(vlan, eth->h_dest);
|
hash = mc_hash(vlan, eth->h_dest);
|
||||||
if (!test_bit(hash, vlan->mc_filter))
|
if (!test_bit(hash, vlan->mc_filter))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
err = NET_RX_DROP;
|
||||||
nskb = skb_clone(skb, GFP_ATOMIC);
|
nskb = skb_clone(skb, GFP_ATOMIC);
|
||||||
err = macvlan_broadcast_one(nskb, vlan, eth,
|
if (likely(nskb))
|
||||||
mode == MACVLAN_MODE_BRIDGE);
|
err = macvlan_broadcast_one(
|
||||||
|
nskb, vlan, eth,
|
||||||
|
mode == MACVLAN_MODE_BRIDGE);
|
||||||
macvlan_count_rx(vlan, skb->len + ETH_HLEN,
|
macvlan_count_rx(vlan, skb->len + ETH_HLEN,
|
||||||
err == NET_RX_SUCCESS, 1);
|
err == NET_RX_SUCCESS, 1);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue