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

Commit 0fd758d6 authored by Mark Bloch's avatar Mark Bloch Committed by Leon Romanovsky
Browse files

net/mlx5: Don't unlock fte while still using it



When adding a new rule to an fte, we need to hold the fte lock
until we add that rule to the fte and increase the fte ref count.

Fixes: 0c56b975 ("net/mlx5_core: Introduce flow steering API")
Signed-off-by: default avatarMark Bloch <markb@mellanox.com>
Signed-off-by: default avatarSaeed Mahameed <saeedm@mellanox.com>
Signed-off-by: default avatarLeon Romanovsky <leon@kernel.org>
parent bd77bf1c
Loading
Loading
Loading
Loading
+4 −2
Original line number Diff line number Diff line
@@ -1107,9 +1107,8 @@ static struct mlx5_flow_rule *add_rule_fg(struct mlx5_flow_group *fg,
				return rule;
			}
			rule = add_rule_fte(fte, fg, dest);
			unlock_ref_node(&fte->node);
			if (IS_ERR(rule))
				goto unlock_fg;
				goto unlock_fte;
			else
				goto add_rule;
		}
@@ -1127,6 +1126,7 @@ static struct mlx5_flow_rule *add_rule_fg(struct mlx5_flow_group *fg,
		goto unlock_fg;
	}
	tree_init_node(&fte->node, 0, del_fte);
	nested_lock_ref_node(&fte->node, FS_MUTEX_CHILD);
	rule = add_rule_fte(fte, fg, dest);
	if (IS_ERR(rule)) {
		kfree(fte);
@@ -1139,6 +1139,8 @@ static struct mlx5_flow_rule *add_rule_fg(struct mlx5_flow_group *fg,
	list_add(&fte->node.list, prev);
add_rule:
	tree_add_node(&rule->node, &fte->node);
unlock_fte:
	unlock_ref_node(&fte->node);
unlock_fg:
	unlock_ref_node(&fg->node);
	return rule;