| From e0cc4bb8ceba46a1e7746152b76c2f70327dec78 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Wed, 21 Oct 2020 08:42:49 +0300 |
| Subject: net/mlx5: Fix deletion of duplicate rules |
| |
| From: Maor Gottlieb <maorg@nvidia.com> |
| |
| [ Upstream commit 465e7baab6d93b399344f5868f84c177ab5cd16f ] |
| |
| When a rule is duplicated, the refcount of the rule is increased so only |
| the second deletion of the rule should cause destruction of the FTE. |
| Currently, the FTE will be destroyed in the first deletion of rule since |
| the modify_mask will be 0. |
| Fix it and call to destroy FTE only if all the rules (FTE's children) |
| have been removed. |
| |
| Fixes: 718ce4d601db ("net/mlx5: Consolidate update FTE for all removal changes") |
| Signed-off-by: Maor Gottlieb <maorg@nvidia.com> |
| Reviewed-by: Mark Bloch <mbloch@nvidia.com> |
| Signed-off-by: Saeed Mahameed <saeedm@nvidia.com> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/net/ethernet/mellanox/mlx5/core/fs_core.c | 7 ++++--- |
| 1 file changed, 4 insertions(+), 3 deletions(-) |
| |
| diff --git a/drivers/net/ethernet/mellanox/mlx5/core/fs_core.c b/drivers/net/ethernet/mellanox/mlx5/core/fs_core.c |
| index 9ac2f52187ea4..16511f6485531 100644 |
| --- a/drivers/net/ethernet/mellanox/mlx5/core/fs_core.c |
| +++ b/drivers/net/ethernet/mellanox/mlx5/core/fs_core.c |
| @@ -1923,10 +1923,11 @@ void mlx5_del_flow_rules(struct mlx5_flow_handle *handle) |
| down_write_ref_node(&fte->node, false); |
| for (i = handle->num_rules - 1; i >= 0; i--) |
| tree_remove_node(&handle->rule[i]->node, true); |
| - if (fte->modify_mask && fte->dests_size) { |
| - modify_fte(fte); |
| + if (fte->dests_size) { |
| + if (fte->modify_mask) |
| + modify_fte(fte); |
| up_write_ref_node(&fte->node, false); |
| - } else { |
| + } else if (list_empty(&fte->node.children)) { |
| del_hw_fte(&fte->node); |
| /* Avoid double call to del_hw_fte */ |
| fte->node.del_hw_func = NULL; |
| -- |
| 2.27.0 |
| |