return err;
 }
 
-static int fdb_delete_by_addr(struct net_bridge *br, const u8 *addr,
-                             u16 vid)
-{
-       struct net_bridge_fdb_entry *fdb;
-
-       fdb = br_fdb_find(br, addr, vid);
-       if (!fdb)
-               return -ENOENT;
-
-       fdb_delete(br, fdb);
-       return 0;
-}
-
-static int __br_fdb_delete_by_addr(struct net_bridge *br,
-                                  const unsigned char *addr, u16 vid)
-{
-       int err;
-
-       spin_lock_bh(&br->hash_lock);
-       err = fdb_delete_by_addr(br, addr, vid);
-       spin_unlock_bh(&br->hash_lock);
-
-       return err;
-}
-
-static int fdb_delete_by_addr_and_port(struct net_bridge_port *p,
+static int fdb_delete_by_addr_and_port(struct net_bridge *br,
+                                      const struct net_bridge_port *p,
                                       const u8 *addr, u16 vlan)
 {
-       struct net_bridge *br = p->br;
        struct net_bridge_fdb_entry *fdb;
 
        fdb = br_fdb_find(br, addr, vlan);
                return -ENOENT;
 
        fdb_delete(br, fdb);
+
        return 0;
 }
 
-static int __br_fdb_delete(struct net_bridge_port *p,
+static int __br_fdb_delete(struct net_bridge *br,
+                          const struct net_bridge_port *p,
                           const unsigned char *addr, u16 vid)
 {
        int err;
 
-       spin_lock_bh(&p->br->hash_lock);
-       err = fdb_delete_by_addr_and_port(p, addr, vid);
-       spin_unlock_bh(&p->br->hash_lock);
+       spin_lock_bh(&br->hash_lock);
+       err = fdb_delete_by_addr_and_port(br, p, addr, vid);
+       spin_unlock_bh(&br->hash_lock);
 
        return err;
 }
        struct net_bridge_vlan_group *vg;
        struct net_bridge_port *p = NULL;
        struct net_bridge_vlan *v;
-       struct net_bridge *br = NULL;
+       struct net_bridge *br;
        int err;
 
        if (dev->priv_flags & IFF_EBRIDGE) {
                        return -EINVAL;
                }
                vg = nbp_vlan_group(p);
+               br = p->br;
        }
 
        if (vid) {
                        return -EINVAL;
                }
 
-               if (dev->priv_flags & IFF_EBRIDGE)
-                       err = __br_fdb_delete_by_addr(br, addr, vid);
-               else
-                       err = __br_fdb_delete(p, addr, vid);
+               err = __br_fdb_delete(br, p, addr, vid);
        } else {
                err = -ENOENT;
-               if (dev->priv_flags & IFF_EBRIDGE)
-                       err = __br_fdb_delete_by_addr(br, addr, 0);
-               else
-                       err &= __br_fdb_delete(p, addr, 0);
-
+               err &= __br_fdb_delete(br, p, addr, 0);
                if (!vg || !vg->num_vlans)
-                       goto out;
+                       return err;
 
                list_for_each_entry(v, &vg->vlan_list, vlist) {
                        if (!br_vlan_should_use(v))
                                continue;
-                       if (dev->priv_flags & IFF_EBRIDGE)
-                               err = __br_fdb_delete_by_addr(br, addr, v->vid);
-                       else
-                               err &= __br_fdb_delete(p, addr, v->vid);
+                       err &= __br_fdb_delete(br, p, addr, v->vid);
                }
        }
-out:
+
        return err;
 }