mlxsw: spectrum_router: Make route creation and destruction symmetric
Host routes that perform decapsulation of IP in IP tunnels have a special adjacency entry linked to them. This entry stores information such as the expected underlay source IP. When the route is deleted this entry needs to be freed. The allocation of the adjacency entry happens in mlxsw_sp_fib4_entry_type_set(), but it is freed in mlxsw_sp_fib4_node_entry_unlink(). Create a new function - mlxsw_sp_fib4_entry_type_unset() - and free the adjacency entry there. This will allow us to consolidate mlxsw_sp_fib{4,6}_node_entry_unlink() in the next patch. Signed-off-by: Ido Schimmel <idosch@mellanox.com> Acked-by: Jiri Pirko <jiri@mellanox.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
0d2fb5aa93
commit
0705297e51
|
@ -4480,6 +4480,19 @@ mlxsw_sp_fib4_entry_type_set(struct mlxsw_sp *mlxsw_sp,
|
|||
}
|
||||
}
|
||||
|
||||
static void
|
||||
mlxsw_sp_fib4_entry_type_unset(struct mlxsw_sp *mlxsw_sp,
|
||||
struct mlxsw_sp_fib_entry *fib_entry)
|
||||
{
|
||||
switch (fib_entry->type) {
|
||||
case MLXSW_SP_FIB_ENTRY_TYPE_IPIP_DECAP:
|
||||
mlxsw_sp_fib_entry_decap_fini(mlxsw_sp, fib_entry);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static struct mlxsw_sp_fib4_entry *
|
||||
mlxsw_sp_fib4_entry_create(struct mlxsw_sp *mlxsw_sp,
|
||||
struct mlxsw_sp_fib_node *fib_node,
|
||||
|
@ -4512,6 +4525,7 @@ mlxsw_sp_fib4_entry_create(struct mlxsw_sp *mlxsw_sp,
|
|||
return fib4_entry;
|
||||
|
||||
err_nexthop4_group_get:
|
||||
mlxsw_sp_fib4_entry_type_unset(mlxsw_sp, fib_entry);
|
||||
err_fib4_entry_type_set:
|
||||
kfree(fib4_entry);
|
||||
return ERR_PTR(err);
|
||||
|
@ -4521,6 +4535,7 @@ static void mlxsw_sp_fib4_entry_destroy(struct mlxsw_sp *mlxsw_sp,
|
|||
struct mlxsw_sp_fib4_entry *fib4_entry)
|
||||
{
|
||||
mlxsw_sp_nexthop4_group_put(mlxsw_sp, &fib4_entry->common);
|
||||
mlxsw_sp_fib4_entry_type_unset(mlxsw_sp, &fib4_entry->common);
|
||||
kfree(fib4_entry);
|
||||
}
|
||||
|
||||
|
@ -4823,9 +4838,6 @@ mlxsw_sp_fib4_node_entry_unlink(struct mlxsw_sp *mlxsw_sp,
|
|||
{
|
||||
mlxsw_sp_fib_node_entry_del(mlxsw_sp, &fib4_entry->common);
|
||||
list_del(&fib4_entry->common.list);
|
||||
|
||||
if (fib4_entry->common.type == MLXSW_SP_FIB_ENTRY_TYPE_IPIP_DECAP)
|
||||
mlxsw_sp_fib_entry_decap_fini(mlxsw_sp, &fib4_entry->common);
|
||||
}
|
||||
|
||||
static void mlxsw_sp_fib4_entry_replace(struct mlxsw_sp *mlxsw_sp,
|
||||
|
|
Loading…
Reference in New Issue