Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b92af5a7 authored by Matan Barak's avatar Matan Barak Committed by Saeed Mahameed
Browse files

net/mlx5: Fix creating a new FTE when an existing but full FTE exists



Currently, when a flow steering rule is added, we look for a FTE with
an identical value. If we find a match, we try to merge the required
destinations with the existing ones. In a case where the existing
destination list is full, the code should return an error to its
consumer. However, the current code just tries to create another FTE.
Fixing that by returning an error in this special scenario.

Fixes: f478be79a22e ("net/mlx5: Add hash table for flow groups in flow table")
Signed-off-by: default avatarMatan Barak <matanb@mellanox.com>
Signed-off-by: default avatarSaeed Mahameed <saeedm@mellanox.com>
parent e19b205b
Loading
Loading
Loading
Loading
+4 −2
Original line number Diff line number Diff line
@@ -1449,7 +1449,7 @@ try_add_to_existing_fg(struct mlx5_flow_table *ft,
		       int dest_num)
{
	struct mlx5_flow_group *g;
	struct mlx5_flow_handle *rule = ERR_PTR(-ENOENT);
	struct mlx5_flow_handle *rule;
	struct rhlist_head *tmp, *list;
	struct match_list {
		struct list_head	list;
@@ -1513,6 +1513,8 @@ try_add_to_existing_fg(struct mlx5_flow_table *ft,
		unlock_ref_node(&g->node);
	}

	rule = ERR_PTR(-ENOENT);

free_list:
	if (!list_empty(&match_head)) {
		struct match_list *match_tmp;
@@ -1553,7 +1555,7 @@ _mlx5_add_flow_rules(struct mlx5_flow_table *ft,

	nested_lock_ref_node(&ft->node, FS_MUTEX_GRANDPARENT);
	rule = try_add_to_existing_fg(ft, spec, flow_act, dest, dest_num);
	if (!IS_ERR(rule))
	if (!IS_ERR(rule) || PTR_ERR(rule) != -ENOENT)
		goto unlock;

	g = create_autogroup(ft, spec->match_criteria_enable,