macvlan: Use 'hash' iterators to simplify code
authorChristophe JAILLET <christophe.jaillet@wanadoo.fr>
Sun, 25 Apr 2021 16:14:10 +0000 (18:14 +0200)
committerDavid S. Miller <davem@davemloft.net>
Tue, 27 Apr 2021 21:03:11 +0000 (14:03 -0700)
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>
drivers/net/macvlan.c

index 7427b989607ea7f21bb27894f18f62277480f02a..1b998aa481f89cf293d18345b0738426f778a2a4 100644 (file)
@@ -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;
-
-               hlist_for_each_safe(h, n, &port->vlan_source_hash[i]) {
-                       struct macvlan_source_entry *entry;
+       hash_for_each_safe(port->vlan_source_hash, i, next, entry, hlist)
+               if (entry->vlan == vlan)
+                       macvlan_hash_del_source(entry);
 
-                       entry = hlist_entry(h, struct macvlan_source_entry,
-                                           hlist);
-                       if (entry->vlan == vlan)
-                               macvlan_hash_del_source(entry);
-               }
-       }
        vlan->macaddr_count = 0;
 }