Commit bb23ffa1 authored by Christophe JAILLET's avatar Christophe JAILLET Committed by David S. Miller
Browse files

macvlan: Use 'hash' iterators to simplify code



Use 'hash_for_each_rcu' and 'hash_for_each_safe' instead of hand writing
them. This saves some lines of code, reduce indentation and improve
readability.

Signed-off-by: default avatarChristophe JAILLET <christophe.jaillet@wanadoo.fr>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 99014088
Loading
Loading
Loading
Loading
+18 −27
Original line number Diff line number Diff line
@@ -272,8 +272,7 @@ static void macvlan_broadcast(struct sk_buff *skb,
	if (skb->protocol == htons(ETH_P_PAUSE))
		return;

	for (i = 0; i < MACVLAN_HASH_SIZE; i++) {
		hlist_for_each_entry_rcu(vlan, &port->vlan_hash[i], hlist) {
	hash_for_each_rcu(port->vlan_hash, i, vlan, hlist) {
		if (vlan->dev == src || !(vlan->mode & mode))
			continue;

@@ -284,15 +283,13 @@ static void macvlan_broadcast(struct sk_buff *skb,
		err = NET_RX_DROP;
		nskb = skb_clone(skb, GFP_ATOMIC);
		if (likely(nskb))
				err = macvlan_broadcast_one(
					nskb, vlan, eth,
			err = macvlan_broadcast_one(nskb, vlan, eth,
					mode == MACVLAN_MODE_BRIDGE) ?:
			      netif_rx_ni(nskb);
		macvlan_count_rx(vlan, skb->len + ETH_HLEN,
				 err == NET_RX_SUCCESS, true);
	}
}
}

static void macvlan_process_broadcast(struct work_struct *w)
{
@@ -380,20 +377,14 @@ static void macvlan_broadcast_enqueue(struct macvlan_port *port,
static void macvlan_flush_sources(struct macvlan_port *port,
				  struct macvlan_dev *vlan)
{
	int i;

	for (i = 0; i < MACVLAN_HASH_SIZE; i++) {
		struct hlist_node *h, *n;

		hlist_for_each_safe(h, n, &port->vlan_source_hash[i]) {
	struct macvlan_source_entry *entry;
	struct hlist_node *next;
	int i;

			entry = hlist_entry(h, struct macvlan_source_entry,
					    hlist);
	hash_for_each_safe(port->vlan_source_hash, i, next, entry, hlist)
		if (entry->vlan == vlan)
			macvlan_hash_del_source(entry);
		}
	}

	vlan->macaddr_count = 0;
}