net/mlx5: E-switch, Don't destroy indirect table in split rule
authorChris Mi <cmi@nvidia.com>
Fri, 10 Mar 2023 07:56:08 +0000 (09:56 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 11 May 2023 14:03:25 +0000 (23:03 +0900)
[ Upstream commit 4c8189302567f75099a336b0efcff8291ec86ff4 ]

Source port rewrite (forward to ovs internal port or statck device) isn't
supported in the rule of split action. So there is no indirect table in
split rule. The cited commit destroyes indirect table in split rule. The
indirect table for other rules will be destroyed wrongly. It will cause
traffic loss.

Fix it by removing the destroy function in split rule. And also remove
the destroy function in error flow.

Fixes: 10742efc20a4 ("net/mlx5e: VF tunnel TX traffic offloading")
Signed-off-by: Chris Mi <cmi@nvidia.com>
Reviewed-by: Roi Dayan <roid@nvidia.com>
Reviewed-by: Maor Dickman <maord@nvidia.com>
Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads.c

index ac8cf1b..519526a 100644 (file)
@@ -733,7 +733,6 @@ mlx5_eswitch_add_fwd_rule(struct mlx5_eswitch *esw,
        kfree(dest);
        return rule;
 err_chain_src_rewrite:
-       esw_put_dest_tables_loop(esw, attr, 0, i);
        mlx5_esw_vporttbl_put(esw, &fwd_attr);
 err_get_fwd:
        mlx5_chains_put_table(chains, attr->chain, attr->prio, 0);
@@ -776,7 +775,6 @@ __mlx5_eswitch_del_rule(struct mlx5_eswitch *esw,
        if (fwd_rule)  {
                mlx5_esw_vporttbl_put(esw, &fwd_attr);
                mlx5_chains_put_table(chains, attr->chain, attr->prio, 0);
-               esw_put_dest_tables_loop(esw, attr, 0, esw_attr->split_count);
        } else {
                if (split)
                        mlx5_esw_vporttbl_put(esw, &fwd_attr);