net/mlx5: fs, delete the FTE when there are no rules attached to it
[ Upstream commit 7b0c6338597613f465d131bd939a51844a00455a ] When an FTE has no children is means all the rules where removed and the FTE can be deleted regardless of the dests_size value. While dests_size should be 0 when there are no children be extra careful not to leak memory or get firmware syndrome if the proper bookkeeping of dests_size wasn't done. Signed-off-by: Mark Bloch <mbloch@nvidia.com> Reviewed-by: Maor Gottlieb <maorg@nvidia.com> Signed-off-by: Saeed Mahameed <saeedm@nvidia.com> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:

committed by
Greg Kroah-Hartman

parent
4d85201adb
commit
9b42659cb3
@@ -2024,16 +2024,16 @@ void mlx5_del_flow_rules(struct mlx5_flow_handle *handle)
|
|||||||
down_write_ref_node(&fte->node, false);
|
down_write_ref_node(&fte->node, false);
|
||||||
for (i = handle->num_rules - 1; i >= 0; i--)
|
for (i = handle->num_rules - 1; i >= 0; i--)
|
||||||
tree_remove_node(&handle->rule[i]->node, true);
|
tree_remove_node(&handle->rule[i]->node, true);
|
||||||
if (fte->dests_size) {
|
if (list_empty(&fte->node.children)) {
|
||||||
if (fte->modify_mask)
|
|
||||||
modify_fte(fte);
|
|
||||||
up_write_ref_node(&fte->node, false);
|
|
||||||
} else if (list_empty(&fte->node.children)) {
|
|
||||||
del_hw_fte(&fte->node);
|
del_hw_fte(&fte->node);
|
||||||
/* Avoid double call to del_hw_fte */
|
/* Avoid double call to del_hw_fte */
|
||||||
fte->node.del_hw_func = NULL;
|
fte->node.del_hw_func = NULL;
|
||||||
up_write_ref_node(&fte->node, false);
|
up_write_ref_node(&fte->node, false);
|
||||||
tree_put_node(&fte->node, false);
|
tree_put_node(&fte->node, false);
|
||||||
|
} else if (fte->dests_size) {
|
||||||
|
if (fte->modify_mask)
|
||||||
|
modify_fte(fte);
|
||||||
|
up_write_ref_node(&fte->node, false);
|
||||||
} else {
|
} else {
|
||||||
up_write_ref_node(&fte->node, false);
|
up_write_ref_node(&fte->node, false);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user