Skip to content

Commit

Permalink
mlxsw: spectrum: Destroy RIFs based on last removed address
Browse files Browse the repository at this point in the history
We only use the RIF reference count to determine when the last IP
address was removed, but instead we can just test 'in_dev->ifa_list'.

Signed-off-by: Ido Schimmel <idosch@mellanox.com>
Signed-off-by: Jiri Pirko <jiri@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Ido Schimmel authored and David S. Miller committed Mar 10, 2017
1 parent 186962e commit f4a761d
Show file tree
Hide file tree
Showing 2 changed files with 3 additions and 5 deletions.
7 changes: 3 additions & 4 deletions drivers/net/ethernet/mellanox/mlxsw/spectrum.c
Original file line number Diff line number Diff line change
Expand Up @@ -3392,16 +3392,16 @@ void mlxsw_sp_port_dev_put(struct mlxsw_sp_port *mlxsw_sp_port)
}

static bool mlxsw_sp_rif_should_config(struct mlxsw_sp_rif *r,
const struct in_device *in_dev,
unsigned long event)
{
switch (event) {
case NETDEV_UP:
if (!r)
return true;
r->ref_count++;
return false;
case NETDEV_DOWN:
if (r && --r->ref_count == 0)
if (r && !in_dev->ifa_list)
return true;
/* It is possible we already removed the RIF ourselves
* if it was assigned to a netdev that is now a bridge
Expand Down Expand Up @@ -3484,7 +3484,6 @@ mlxsw_sp_rif_alloc(u16 rif, struct net_device *l3_dev, struct mlxsw_sp_fid *f)
INIT_LIST_HEAD(&r->neigh_list);
ether_addr_copy(r->addr, l3_dev->dev_addr);
r->mtu = l3_dev->mtu;
r->ref_count = 1;
r->dev = l3_dev;
r->rif = rif;
r->f = f;
Expand Down Expand Up @@ -3858,7 +3857,7 @@ static int mlxsw_sp_inetaddr_event(struct notifier_block *unused,
goto out;

r = mlxsw_sp_rif_find_by_dev(mlxsw_sp, dev);
if (!mlxsw_sp_rif_should_config(r, event))
if (!mlxsw_sp_rif_should_config(r, ifa->ifa_dev, event))
goto out;

if (mlxsw_sp_port_dev_check(dev))
Expand Down
1 change: 0 additions & 1 deletion drivers/net/ethernet/mellanox/mlxsw/spectrum.h
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,6 @@ struct mlxsw_sp_rif {
struct list_head nexthop_list;
struct list_head neigh_list;
struct net_device *dev;
unsigned int ref_count;
struct mlxsw_sp_fid *f;
unsigned char addr[ETH_ALEN];
int mtu;
Expand Down

0 comments on commit f4a761d

Please sign in to comment.