Skip to content

Commit a42485e

Browse files
ogerlitzdavem330
authored andcommitted
net/mlx5e: TC ipv4 tunnel encap offload error flow fixes
When the route lookup fails we should return the actual error. When the neigh isn't valid, we should return -EOPNOTSUPP as done in similar cases along the code. When the offload can't take place as of invalid neigh etc, we must release the neigh. Fixes: a54e20b ('net/mlx5e: Add basic TC tunnel set action for SRIOV offloads') Signed-off-by: Or Gerlitz <[email protected]> Reviewed-by: Hadar Hen Zion <[email protected]> Signed-off-by: Saeed Mahameed <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent 2fcd82e commit a42485e

File tree

1 file changed

+8
-8
lines changed
  • drivers/net/ethernet/mellanox/mlx5/core

1 file changed

+8
-8
lines changed

drivers/net/ethernet/mellanox/mlx5/core/en_tc.c

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -656,17 +656,14 @@ static int mlx5e_route_lookup_ipv4(struct mlx5e_priv *priv,
656656

657657
#if IS_ENABLED(CONFIG_INET)
658658
rt = ip_route_output_key(dev_net(mirred_dev), fl4);
659-
if (IS_ERR(rt)) {
660-
pr_warn("%s: no route to %pI4\n", __func__, &fl4->daddr);
661-
return -EOPNOTSUPP;
662-
}
659+
if (IS_ERR(rt))
660+
return PTR_ERR(rt);
663661
#else
664662
return -EOPNOTSUPP;
665663
#endif
666664

667665
if (!switchdev_port_same_parent_id(priv->netdev, rt->dst.dev)) {
668-
pr_warn("%s: Can't offload the flow, netdevices aren't on the same HW e-switch\n",
669-
__func__);
666+
pr_warn("%s: can't offload, devices not on same HW e-switch\n", __func__);
670667
ip_rt_put(rt);
671668
return -EOPNOTSUPP;
672669
}
@@ -727,8 +724,8 @@ static int mlx5e_create_encap_header_ipv4(struct mlx5e_priv *priv,
727724
struct net_device **out_dev)
728725
{
729726
int max_encap_size = MLX5_CAP_ESW(priv->mdev, max_encap_header_size);
727+
struct neighbour *n = NULL;
730728
struct flowi4 fl4 = {};
731-
struct neighbour *n;
732729
char *encap_header;
733730
int encap_size;
734731
__be32 saddr;
@@ -759,7 +756,8 @@ static int mlx5e_create_encap_header_ipv4(struct mlx5e_priv *priv,
759756
e->out_dev = *out_dev;
760757

761758
if (!(n->nud_state & NUD_VALID)) {
762-
err = -ENOTSUPP;
759+
pr_warn("%s: can't offload, neighbour to %pI4 invalid\n", __func__, &fl4.daddr);
760+
err = -EOPNOTSUPP;
763761
goto out;
764762
}
765763

@@ -781,6 +779,8 @@ static int mlx5e_create_encap_header_ipv4(struct mlx5e_priv *priv,
781779
err = mlx5_encap_alloc(priv->mdev, e->tunnel_type,
782780
encap_size, encap_header, &e->encap_id);
783781
out:
782+
if (err && n)
783+
neigh_release(n);
784784
kfree(encap_header);
785785
return err;
786786
}

0 commit comments

Comments
 (0)