forked from Minki/linux
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: 0c56b97503
("net/mlx5_core: Introduce flow steering API")
Signed-off-by: Mark Bloch <markb@mellanox.com>
Signed-off-by: Saeed Mahameed <saeedm@mellanox.com>
Signed-off-by: Leon Romanovsky <leon@kernel.org>
This commit is contained in:
parent
bd77bf1cb5
commit
0fd758d611
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user