Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit de9e8f3f authored by Herbert Xu's avatar Herbert Xu Committed by David S. Miller
Browse files

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: default avatarHerbert Xu <herbert@gondor.apana.org.au>

Thanks,
Reviewed-by: default avatarSimon Horman <horms@verge.net.au>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 97f3f6fc
Loading
Loading
Loading
Loading
+6 −4
Original line number Diff line number Diff line
@@ -118,8 +118,6 @@ static int macvlan_broadcast_one(struct sk_buff *skb,
				 const struct ethhdr *eth, bool local)
{
	struct net_device *dev = vlan->dev;
	if (!skb)
		return NET_RX_DROP;

	if (local)
		return vlan->forward(dev, skb);
@@ -171,8 +169,12 @@ static void macvlan_broadcast(struct sk_buff *skb,
			hash = mc_hash(vlan, eth->h_dest);
			if (!test_bit(hash, vlan->mc_filter))
				continue;

			err = NET_RX_DROP;
			nskb = skb_clone(skb, GFP_ATOMIC);
			err = macvlan_broadcast_one(nskb, vlan, eth,
			if (likely(nskb))
				err = macvlan_broadcast_one(
					nskb, vlan, eth,
					mode == MACVLAN_MODE_BRIDGE);
			macvlan_count_rx(vlan, skb->len + ETH_HLEN,
					 err == NET_RX_SUCCESS, 1);