From 817a6c47404550374d5a0700b328a803bec9b13e Mon Sep 17 00:00:00 2001 From: Viacheslav Ovsiienko Date: Sat, 10 Nov 2018 10:01:59 +0000 Subject: [PATCH] net/mlx5: fix VXLAN device rollback if rule apply fails If rule contains tunneling action (like VXLAN encapsulation) the VTEP (Virtual Tunneling EndPoint) device is pre-configured before applying the rule. If kernel returns an error this VTEP configuration should be rolled back to the origin state. The patch adds the missing VTEP configuration restoration. Fixes: 95a464cecc21 ("net/mlx5: add E-switch VXLAN tunnel devices management") Signed-off-by: Viacheslav Ovsiienko Acked-by: Shahaf Shuler Acked-by: Yongseok Koh --- drivers/net/mlx5/mlx5_flow_tcf.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/drivers/net/mlx5/mlx5_flow_tcf.c b/drivers/net/mlx5/mlx5_flow_tcf.c index 21eb99ea11..97d2a54c52 100644 --- a/drivers/net/mlx5/mlx5_flow_tcf.c +++ b/drivers/net/mlx5/mlx5_flow_tcf.c @@ -5124,6 +5124,13 @@ flow_tcf_apply(struct rte_eth_dev *dev, struct rte_flow *flow, dev_flow->tcf.applied = 1; return 0; } + if (dev_flow->tcf.tunnel) { + /* Rollback the VTEP configuration if rule apply failed. */ + assert(dev_flow->tcf.tunnel->vtep); + flow_tcf_vtep_release(ctx, dev_flow->tcf.tunnel->vtep, + dev_flow); + dev_flow->tcf.tunnel->vtep = NULL; + } return rte_flow_error_set(error, rte_errno, RTE_FLOW_ERROR_TYPE_UNSPECIFIED, NULL, "netlink: failed to create TC flow rule"); -- 2.20.1