net/mlx5: fix VXLAN device rollback if rule apply fails
authorViacheslav Ovsiienko <viacheslavo@mellanox.com>
Sat, 10 Nov 2018 10:01:59 +0000 (10:01 +0000)
committerFerruh Yigit <ferruh.yigit@intel.com>
Tue, 13 Nov 2018 23:35:53 +0000 (00:35 +0100)
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 <viacheslavo@mellanox.com>
Acked-by: Shahaf Shuler <shahafs@mellanox.com>
Acked-by: Yongseok Koh <yskoh@mellanox.com>
drivers/net/mlx5/mlx5_flow_tcf.c

index 21eb99e..97d2a54 100644 (file)
@@ -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");