return 0;
 }
 
-static int bcm_sf2_sw_br_leave(struct dsa_switch *ds, int port)
+static void bcm_sf2_sw_br_leave(struct dsa_switch *ds, int port)
 {
        struct bcm_sf2_priv *priv = ds_to_priv(ds);
        struct net_device *bridge = priv->port_sts[port].bridge_dev;
        core_writel(priv, p_ctl, CORE_PORT_VLAN_CTL_PORT(port));
        priv->port_sts[port].vlan_ctl_mask = p_ctl;
        priv->port_sts[port].bridge_dev = NULL;
-
-       return 0;
 }
 
 static int bcm_sf2_sw_br_set_stp_state(struct dsa_switch *ds, int port,
 
        return err;
 }
 
-int mv88e6xxx_port_bridge_leave(struct dsa_switch *ds, int port)
+void mv88e6xxx_port_bridge_leave(struct dsa_switch *ds, int port)
 {
        struct mv88e6xxx_priv_state *ps = ds_to_priv(ds);
        struct net_device *bridge = ps->ports[port].bridge_dev;
        u16 fid;
-       int i, err;
+       int i;
 
        mutex_lock(&ps->smi_mutex);
 
        /* Give the port a fresh Filtering Information Database */
-       err = _mv88e6xxx_fid_new(ds, &fid);
-       if (err)
-               goto unlock;
-
-       err = _mv88e6xxx_port_fid_set(ds, port, fid);
-       if (err)
-               goto unlock;
+       if (_mv88e6xxx_fid_new(ds, &fid) ||
+           _mv88e6xxx_port_fid_set(ds, port, fid))
+               netdev_warn(ds->ports[port], "failed to assign a new FID\n");
 
        /* Unassign the bridge and remap each port's VLANTable */
        ps->ports[port].bridge_dev = NULL;
 
-       for (i = 0; i < ps->num_ports; ++i) {
-               if (i == port || ps->ports[i].bridge_dev == bridge) {
-                       err = _mv88e6xxx_port_based_vlan_map(ds, i);
-                       if (err)
-                               break;
-               }
-       }
+       for (i = 0; i < ps->num_ports; ++i)
+               if (i == port || ps->ports[i].bridge_dev == bridge)
+                       if (_mv88e6xxx_port_based_vlan_map(ds, i))
+                               netdev_warn(ds->ports[i], "failed to remap\n");
 
-unlock:
        mutex_unlock(&ps->smi_mutex);
-
-       return err;
 }
 
 static void mv88e6xxx_bridge_work(struct work_struct *work)
 
                      struct phy_device *phydev, struct ethtool_eee *e);
 int mv88e6xxx_port_bridge_join(struct dsa_switch *ds, int port,
                               struct net_device *bridge);
-int mv88e6xxx_port_bridge_leave(struct dsa_switch *ds, int port);
+void mv88e6xxx_port_bridge_leave(struct dsa_switch *ds, int port);
 int mv88e6xxx_port_stp_update(struct dsa_switch *ds, int port, u8 state);
 int mv88e6xxx_port_vlan_filtering(struct dsa_switch *ds, int port,
                                  bool vlan_filtering);
 
         */
        int     (*port_bridge_join)(struct dsa_switch *ds, int port,
                                    struct net_device *bridge);
-       int     (*port_bridge_leave)(struct dsa_switch *ds, int port);
+       void    (*port_bridge_leave)(struct dsa_switch *ds, int port);
        int     (*port_stp_update)(struct dsa_switch *ds, int port,
                                   u8 state);
 
 
        return ret;
 }
 
-static int dsa_slave_bridge_port_leave(struct net_device *dev)
+static void dsa_slave_bridge_port_leave(struct net_device *dev)
 {
        struct dsa_slave_priv *p = netdev_priv(dev);
        struct dsa_switch *ds = p->parent;
-       int ret = -EOPNOTSUPP;
 
 
        if (ds->drv->port_bridge_leave)
-               ret = ds->drv->port_bridge_leave(ds, p->port);
+               ds->drv->port_bridge_leave(ds, p->port);
 
        p->bridge_dev = NULL;
 
         * so allow it to be in BR_STATE_FORWARDING to be kept functional
         */
        dsa_slave_stp_update(dev, BR_STATE_FORWARDING);
-
-       return ret;
 }
 
 static int dsa_slave_port_attr_get(struct net_device *dev,
            !strcmp(master->rtnl_link_ops->kind, "bridge"))
                err = dsa_slave_bridge_port_join(dev, master);
        else if (dsa_port_is_bridged(p))
-               err = dsa_slave_bridge_port_leave(dev);
+               dsa_slave_bridge_port_leave(dev);
 
        return err;
 }