OSDN Git Service

net/mlx5e: TC, Move kfree() calls after destroying all resources
authorRoi Dayan <roid@nvidia.com>
Mon, 1 Nov 2021 16:13:02 +0000 (18:13 +0200)
committerSaeed Mahameed <saeedm@nvidia.com>
Wed, 17 Nov 2021 04:31:50 +0000 (20:31 -0800)
When deleting fdb/nic flow rules first release all resources
and then call the kfree() calls instead of sparse them around
the function.

Signed-off-by: Roi Dayan <roid@nvidia.com>
Reviewed-by: Vlad Buslov <vladbu@nvidia.com>
Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
drivers/net/ethernet/mellanox/mlx5/core/en_tc.c

index 3e542b0..aa4da8d 100644 (file)
@@ -1128,8 +1128,6 @@ static void mlx5e_tc_del_nic_flow(struct mlx5e_priv *priv,
        }
        mutex_unlock(&priv->fs.tc.t_lock);
 
-       kvfree(attr->parse_attr);
-
        if (attr->action & MLX5_FLOW_CONTEXT_ACTION_MOD_HDR)
                mlx5e_detach_mod_hdr(priv, flow);
 
@@ -1139,6 +1137,7 @@ static void mlx5e_tc_del_nic_flow(struct mlx5e_priv *priv,
        if (flow_flag_test(flow, HAIRPIN))
                mlx5e_hairpin_flow_del(priv, flow);
 
+       kvfree(attr->parse_attr);
        kfree(flow->attr);
 }
 
@@ -1626,9 +1625,6 @@ static void mlx5e_tc_del_fdb_flow(struct mlx5e_priv *priv,
                else
                        mlx5e_detach_mod_hdr(priv, flow);
        }
-       kfree(attr->sample_attr);
-       kvfree(attr->parse_attr);
-       kvfree(attr->esw_attr->rx_tun_attr);
 
        if (attr->action & MLX5_FLOW_CONTEXT_ACTION_COUNT)
                mlx5_fc_destroy(esw_attr->counter_dev, attr->counter);
@@ -1642,6 +1638,9 @@ static void mlx5e_tc_del_fdb_flow(struct mlx5e_priv *priv,
        if (flow_flag_test(flow, L3_TO_L2_DECAP))
                mlx5e_detach_decap(priv, flow);
 
+       kfree(attr->sample_attr);
+       kvfree(attr->esw_attr->rx_tun_attr);
+       kvfree(attr->parse_attr);
        kfree(flow->attr);
 }