net/mlx5: CT: Fix header-rewrite re-use for tupels
Tuple entries that don't have nat configured for them
which are added to the ct nat table will always create
a new modify header, as we don't check for possible
re-use on them. The same for tuples that have nat configured
for them but are added to ct table.
Fix the above by only avoiding wasteful re-use lookup
for actually natted entries in ct nat table.
Fixes: 7fac5c2ece
("net/mlx5: CT: Avoid reusing modify header context for natted entries")
Signed-off-by: Paul Blakey <paulb@nvidia.com>
Reviewed-by: Ariel Levkovich <lariel@nvidia.com>
Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
This commit is contained in:
parent
66cb64e292
commit
1f2856cde6
|
@ -715,7 +715,7 @@ mlx5_tc_ct_entry_create_mod_hdr(struct mlx5_tc_ct_priv *ct_priv,
|
|||
struct mlx5_flow_attr *attr,
|
||||
struct flow_rule *flow_rule,
|
||||
struct mlx5e_mod_hdr_handle **mh,
|
||||
u8 zone_restore_id, bool nat)
|
||||
u8 zone_restore_id, bool nat_table, bool has_nat)
|
||||
{
|
||||
DECLARE_MOD_HDR_ACTS_ACTIONS(actions_arr, MLX5_CT_MIN_MOD_ACTS);
|
||||
DECLARE_MOD_HDR_ACTS(mod_acts, actions_arr);
|
||||
|
@ -731,11 +731,12 @@ mlx5_tc_ct_entry_create_mod_hdr(struct mlx5_tc_ct_priv *ct_priv,
|
|||
&attr->ct_attr.ct_labels_id);
|
||||
if (err)
|
||||
return -EOPNOTSUPP;
|
||||
if (nat) {
|
||||
err = mlx5_tc_ct_entry_create_nat(ct_priv, flow_rule,
|
||||
&mod_acts);
|
||||
if (err)
|
||||
goto err_mapping;
|
||||
if (nat_table) {
|
||||
if (has_nat) {
|
||||
err = mlx5_tc_ct_entry_create_nat(ct_priv, flow_rule, &mod_acts);
|
||||
if (err)
|
||||
goto err_mapping;
|
||||
}
|
||||
|
||||
ct_state |= MLX5_CT_STATE_NAT_BIT;
|
||||
}
|
||||
|
@ -750,7 +751,7 @@ mlx5_tc_ct_entry_create_mod_hdr(struct mlx5_tc_ct_priv *ct_priv,
|
|||
if (err)
|
||||
goto err_mapping;
|
||||
|
||||
if (nat) {
|
||||
if (nat_table && has_nat) {
|
||||
attr->modify_hdr = mlx5_modify_header_alloc(ct_priv->dev, ct_priv->ns_type,
|
||||
mod_acts.num_actions,
|
||||
mod_acts.actions);
|
||||
|
@ -818,7 +819,9 @@ mlx5_tc_ct_entry_add_rule(struct mlx5_tc_ct_priv *ct_priv,
|
|||
|
||||
err = mlx5_tc_ct_entry_create_mod_hdr(ct_priv, attr, flow_rule,
|
||||
&zone_rule->mh,
|
||||
zone_restore_id, nat);
|
||||
zone_restore_id,
|
||||
nat,
|
||||
mlx5_tc_ct_entry_has_nat(entry));
|
||||
if (err) {
|
||||
ct_dbg("Failed to create ct entry mod hdr");
|
||||
goto err_mod_hdr;
|
||||
|
|
Loading…
Reference in New Issue