diff options
author | Ido Schimmel <idosch@nvidia.com> | 2020-11-17 19:47:03 +0200 |
---|---|---|
committer | Jakub Kicinski <kuba@kernel.org> | 2020-11-18 11:51:18 -0800 |
commit | 2efca2bfba995e67a5372288a4d745fcefc6e8ce (patch) | |
tree | d8f2b7989f836b33c8ddb26b959ed4c536a06297 /drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c | |
parent | mlxsw: spectrum_router: Only clear offload indication from valid IPv6 FIB info (diff) | |
download | linux-dev-2efca2bfba995e67a5372288a4d745fcefc6e8ce.tar.xz linux-dev-2efca2bfba995e67a5372288a4d745fcefc6e8ce.zip |
mlxsw: spectrum_router: Add an indication if a nexthop group can be destroyed
Currently, a nexthop group is destroyed when the last FIB entry is
detached from it.
When nexthop objects are supported, this can no longer be the case, as
the group is a separate object whose lifetime is managed by user space.
Add an indication if a nexthop group can be destroyed and always set it
to true for the existing IPv4 and IPv6 nexthop groups.
Signed-off-by: Ido Schimmel <idosch@nvidia.com>
Reviewed-by: Jiri Pirko <jiri@nvidia.com>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Diffstat (limited to '')
-rw-r--r-- | drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c index 645ec70314d2..87b8c8db688b 100644 --- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c +++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c @@ -2897,6 +2897,7 @@ struct mlxsw_sp_nexthop_group { }; struct mlxsw_sp_nexthop_group_info *nhgi; enum mlxsw_sp_nexthop_group_type type; + bool can_destroy; }; void mlxsw_sp_nexthop_counter_alloc(struct mlxsw_sp *mlxsw_sp, @@ -4173,6 +4174,8 @@ mlxsw_sp_nexthop4_group_create(struct mlxsw_sp *mlxsw_sp, struct fib_info *fi) if (err) goto err_nexthop_group_insert; + nh_grp->can_destroy = true; + return nh_grp; err_nexthop_group_insert: @@ -4187,6 +4190,8 @@ static void mlxsw_sp_nexthop4_group_destroy(struct mlxsw_sp *mlxsw_sp, struct mlxsw_sp_nexthop_group *nh_grp) { + if (!nh_grp->can_destroy) + return; mlxsw_sp_nexthop_group_remove(mlxsw_sp, nh_grp); mlxsw_sp_nexthop4_group_info_fini(mlxsw_sp, nh_grp); fib_info_put(nh_grp->ipv4.fi); @@ -5479,6 +5484,8 @@ mlxsw_sp_nexthop6_group_create(struct mlxsw_sp *mlxsw_sp, if (err) goto err_nexthop_group_insert; + nh_grp->can_destroy = true; + return nh_grp; err_nexthop_group_insert: @@ -5492,6 +5499,8 @@ static void mlxsw_sp_nexthop6_group_destroy(struct mlxsw_sp *mlxsw_sp, struct mlxsw_sp_nexthop_group *nh_grp) { + if (!nh_grp->can_destroy) + return; mlxsw_sp_nexthop_group_remove(mlxsw_sp, nh_grp); mlxsw_sp_nexthop6_group_info_fini(mlxsw_sp, nh_grp); kfree(nh_grp); |