mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-01 08:04:22 +08:00
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: Christophe JAILLET <christophe.jaillet@wanadoo.fr> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
9901408815
commit
bb23ffa101
@ -272,25 +272,22 @@ 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) {
|
||||
if (vlan->dev == src || !(vlan->mode & mode))
|
||||
continue;
|
||||
hash_for_each_rcu(port->vlan_hash, i, vlan, hlist) {
|
||||
if (vlan->dev == src || !(vlan->mode & mode))
|
||||
continue;
|
||||
|
||||
hash = mc_hash(vlan, eth->h_dest);
|
||||
if (!test_bit(hash, vlan->mc_filter))
|
||||
continue;
|
||||
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);
|
||||
if (likely(nskb))
|
||||
err = macvlan_broadcast_one(
|
||||
nskb, vlan, eth,
|
||||
err = NET_RX_DROP;
|
||||
nskb = skb_clone(skb, GFP_ATOMIC);
|
||||
if (likely(nskb))
|
||||
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);
|
||||
}
|
||||
netif_rx_ni(nskb);
|
||||
macvlan_count_rx(vlan, skb->len + ETH_HLEN,
|
||||
err == NET_RX_SUCCESS, true);
|
||||
}
|
||||
}
|
||||
|
||||
@ -380,20 +377,14 @@ err:
|
||||
static void macvlan_flush_sources(struct macvlan_port *port,
|
||||
struct macvlan_dev *vlan)
|
||||
{
|
||||
struct macvlan_source_entry *entry;
|
||||
struct hlist_node *next;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < MACVLAN_HASH_SIZE; i++) {
|
||||
struct hlist_node *h, *n;
|
||||
hash_for_each_safe(port->vlan_source_hash, i, next, entry, hlist)
|
||||
if (entry->vlan == vlan)
|
||||
macvlan_hash_del_source(entry);
|
||||
|
||||
hlist_for_each_safe(h, n, &port->vlan_source_hash[i]) {
|
||||
struct macvlan_source_entry *entry;
|
||||
|
||||
entry = hlist_entry(h, struct macvlan_source_entry,
|
||||
hlist);
|
||||
if (entry->vlan == vlan)
|
||||
macvlan_hash_del_source(entry);
|
||||
}
|
||||
}
|
||||
vlan->macaddr_count = 0;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user