net: bridge: remove fdb_insert forward declaration
authorVladimir Oltean <vladimir.oltean@nxp.com>
Tue, 26 Oct 2021 14:27:37 +0000 (17:27 +0300)
committerDavid S. Miller <davem@davemloft.net>
Wed, 27 Oct 2021 13:54:02 +0000 (14:54 +0100)
fdb_insert() has a forward declaration because its first caller,
br_fdb_changeaddr(), is declared before fdb_create(), a function which
fdb_insert() needs.

This patch moves the 2 functions above br_fdb_changeaddr() and deletes
the forward declaration for fdb_insert().

Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
Reviewed-by: Ido Schimmel <idosch@nvidia.com>
Acked-by: Nikolay Aleksandrov <nikolay@nvidia.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/bridge/br_fdb.c

index bfb28a2..082e911 100644 (file)
@@ -32,8 +32,6 @@ static const struct rhashtable_params br_fdb_rht_params = {
 };
 
 static struct kmem_cache *br_fdb_cache __read_mostly;
-static int fdb_insert(struct net_bridge *br, struct net_bridge_port *source,
-                     const unsigned char *addr, u16 vid);
 
 int __init br_fdb_init(void)
 {
@@ -377,6 +375,63 @@ void br_fdb_find_delete_local(struct net_bridge *br,
        spin_unlock_bh(&br->hash_lock);
 }
 
+static struct net_bridge_fdb_entry *fdb_create(struct net_bridge *br,
+                                              struct net_bridge_port *source,
+                                              const unsigned char *addr,
+                                              __u16 vid,
+                                              unsigned long flags)
+{
+       struct net_bridge_fdb_entry *fdb;
+
+       fdb = kmem_cache_alloc(br_fdb_cache, GFP_ATOMIC);
+       if (fdb) {
+               memcpy(fdb->key.addr.addr, addr, ETH_ALEN);
+               WRITE_ONCE(fdb->dst, source);
+               fdb->key.vlan_id = vid;
+               fdb->flags = flags;
+               fdb->updated = fdb->used = jiffies;
+               if (rhashtable_lookup_insert_fast(&br->fdb_hash_tbl,
+                                                 &fdb->rhnode,
+                                                 br_fdb_rht_params)) {
+                       kmem_cache_free(br_fdb_cache, fdb);
+                       fdb = NULL;
+               } else {
+                       hlist_add_head_rcu(&fdb->fdb_node, &br->fdb_list);
+               }
+       }
+       return fdb;
+}
+
+static int fdb_insert(struct net_bridge *br, struct net_bridge_port *source,
+                     const unsigned char *addr, u16 vid)
+{
+       struct net_bridge_fdb_entry *fdb;
+
+       if (!is_valid_ether_addr(addr))
+               return -EINVAL;
+
+       fdb = br_fdb_find(br, addr, vid);
+       if (fdb) {
+               /* it is okay to have multiple ports with same
+                * address, just use the first one.
+                */
+               if (test_bit(BR_FDB_LOCAL, &fdb->flags))
+                       return 0;
+               br_warn(br, "adding interface %s with same address as a received packet (addr:%pM, vlan:%u)\n",
+                       source ? source->dev->name : br->dev->name, addr, vid);
+               fdb_delete(br, fdb, true);
+       }
+
+       fdb = fdb_create(br, source, addr, vid,
+                        BIT(BR_FDB_LOCAL) | BIT(BR_FDB_STATIC));
+       if (!fdb)
+               return -ENOMEM;
+
+       fdb_add_hw_addr(br, addr);
+       fdb_notify(br, fdb, RTM_NEWNEIGH, true);
+       return 0;
+}
+
 void br_fdb_changeaddr(struct net_bridge_port *p, const unsigned char *newaddr)
 {
        struct net_bridge_vlan_group *vg;
@@ -623,63 +678,6 @@ int br_fdb_fillbuf(struct net_bridge *br, void *buf,
        return num;
 }
 
-static struct net_bridge_fdb_entry *fdb_create(struct net_bridge *br,
-                                              struct net_bridge_port *source,
-                                              const unsigned char *addr,
-                                              __u16 vid,
-                                              unsigned long flags)
-{
-       struct net_bridge_fdb_entry *fdb;
-
-       fdb = kmem_cache_alloc(br_fdb_cache, GFP_ATOMIC);
-       if (fdb) {
-               memcpy(fdb->key.addr.addr, addr, ETH_ALEN);
-               WRITE_ONCE(fdb->dst, source);
-               fdb->key.vlan_id = vid;
-               fdb->flags = flags;
-               fdb->updated = fdb->used = jiffies;
-               if (rhashtable_lookup_insert_fast(&br->fdb_hash_tbl,
-                                                 &fdb->rhnode,
-                                                 br_fdb_rht_params)) {
-                       kmem_cache_free(br_fdb_cache, fdb);
-                       fdb = NULL;
-               } else {
-                       hlist_add_head_rcu(&fdb->fdb_node, &br->fdb_list);
-               }
-       }
-       return fdb;
-}
-
-static int fdb_insert(struct net_bridge *br, struct net_bridge_port *source,
-                 const unsigned char *addr, u16 vid)
-{
-       struct net_bridge_fdb_entry *fdb;
-
-       if (!is_valid_ether_addr(addr))
-               return -EINVAL;
-
-       fdb = br_fdb_find(br, addr, vid);
-       if (fdb) {
-               /* it is okay to have multiple ports with same
-                * address, just use the first one.
-                */
-               if (test_bit(BR_FDB_LOCAL, &fdb->flags))
-                       return 0;
-               br_warn(br, "adding interface %s with same address as a received packet (addr:%pM, vlan:%u)\n",
-                      source ? source->dev->name : br->dev->name, addr, vid);
-               fdb_delete(br, fdb, true);
-       }
-
-       fdb = fdb_create(br, source, addr, vid,
-                        BIT(BR_FDB_LOCAL) | BIT(BR_FDB_STATIC));
-       if (!fdb)
-               return -ENOMEM;
-
-       fdb_add_hw_addr(br, addr);
-       fdb_notify(br, fdb, RTM_NEWNEIGH, true);
-       return 0;
-}
-
 /* Add entry for local address of interface */
 int br_fdb_insert(struct net_bridge *br, struct net_bridge_port *source,
                  const unsigned char *addr, u16 vid)