diff options
Diffstat (limited to 'drivers/net/ethernet/mellanox/mlx5/core/en_tc.c')
-rw-r--r-- | drivers/net/ethernet/mellanox/mlx5/core/en_tc.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c b/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c index c57f7533a6d0..3917834b48ff 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c @@ -1481,10 +1481,13 @@ void mlx5e_tc_update_neigh_used_value(struct mlx5e_neigh_hash_entry *nhe) static void mlx5e_encap_dealloc(struct mlx5e_priv *priv, struct mlx5e_encap_entry *e) { WARN_ON(!list_empty(&e->flows)); - mlx5e_rep_encap_entry_detach(netdev_priv(e->out_dev), e); - if (e->flags & MLX5_ENCAP_ENTRY_VALID) - mlx5_packet_reformat_dealloc(priv->mdev, e->encap_id); + if (e->compl_result > 0) { + mlx5e_rep_encap_entry_detach(netdev_priv(e->out_dev), e); + + if (e->flags & MLX5_ENCAP_ENTRY_VALID) + mlx5_packet_reformat_dealloc(priv->mdev, e->encap_id); + } kfree(e->encap_header); kfree(e); @@ -2919,7 +2922,7 @@ static int mlx5e_attach_encap(struct mlx5e_priv *priv, /* Protect against concurrent neigh update. */ mutex_lock(&esw->offloads.encap_tbl_lock); - if (e->compl_result) { + if (e->compl_result < 0) { err = -EREMOTEIO; goto out_err; } @@ -2959,6 +2962,7 @@ static int mlx5e_attach_encap(struct mlx5e_priv *priv, e->compl_result = err; goto out_err; } + e->compl_result = 1; attach_flow: flow->encaps[out_index].e = e; |