mirror of
https://github.com/torvalds/linux.git
synced 2024-11-30 16:11:38 +00:00
net/mlx5e: CT: Fix queued up restore put() executing after relevant ft release
__mlx5_tc_ct_entry_put() queues release of tuple related to some ct FT,
if that is the last reference to that tuple, the actual deletion of
the tuple can happen after the FT is already destroyed and freed.
Flush the used workqueue before destroying the ct FT.
Fixes: a217313152
("net/mlx5e: CT: manage the lifetime of the ct entry object")
Reviewed-by: Oz Shlomo <ozsh@nvidia.com>
Signed-off-by: Paul Blakey <paulb@nvidia.com>
Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
This commit is contained in:
parent
e3fdc71bcb
commit
b069e14fff
@ -1741,6 +1741,8 @@ mlx5_tc_ct_flush_ft_entry(void *ptr, void *arg)
|
||||
static void
|
||||
mlx5_tc_ct_del_ft_cb(struct mlx5_tc_ct_priv *ct_priv, struct mlx5_ct_ft *ft)
|
||||
{
|
||||
struct mlx5e_priv *priv;
|
||||
|
||||
if (!refcount_dec_and_test(&ft->refcount))
|
||||
return;
|
||||
|
||||
@ -1750,6 +1752,8 @@ mlx5_tc_ct_del_ft_cb(struct mlx5_tc_ct_priv *ct_priv, struct mlx5_ct_ft *ft)
|
||||
rhashtable_free_and_destroy(&ft->ct_entries_ht,
|
||||
mlx5_tc_ct_flush_ft_entry,
|
||||
ct_priv);
|
||||
priv = netdev_priv(ct_priv->netdev);
|
||||
flush_workqueue(priv->wq);
|
||||
mlx5_tc_ct_free_pre_ct_tables(ft);
|
||||
mapping_remove(ct_priv->zone_mapping, ft->zone_restore_id);
|
||||
kfree(ft);
|
||||
|
Loading…
Reference in New Issue
Block a user