Skip to content

Commit

Permalink
datapath: backport: ovs/gre,geneve: fix error path when creating an i…
Browse files Browse the repository at this point in the history
…face

Upstream commit:
    commit 106da663ff495e0aea3ac15b8317aa410754fcac
    Author: Nicolas Dichtel <nicolas.dichtel@6wind.com>

    ovs/gre,geneve: fix error path when creating an iface

    After ipgre_newlink()/geneve_configure() call, the netdev is registered.

    Fixes: 7e059158d57b ("vxlan, gre, geneve: Set a large MTU on ovs-created tunnel devices")
    CC: David Wragg <david@weave.works>
    Signed-off-by: Nicolas Dichtel <nicolas.dichtel@6wind.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>

Signed-off-by: Pravin B Shelar <pshelar@ovn.org>
Acked-by: Jesse Gross <jesse@kernel.org>
  • Loading branch information
pshelar committed Jul 9, 2016
1 parent 43038e7 commit 7cecb9c
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 10 deletions.
10 changes: 7 additions & 3 deletions datapath/linux/compat/geneve.c
Expand Up @@ -1596,6 +1596,7 @@ struct net_device *rpl_geneve_dev_create_fb(struct net *net, const char *name,
{
struct nlattr *tb[IFLA_MAX + 1];
struct net_device *dev;
LIST_HEAD(list_kill);
int err;

memset(tb, 0, sizeof(tb));
Expand All @@ -1607,8 +1608,10 @@ struct net_device *rpl_geneve_dev_create_fb(struct net *net, const char *name,
err = geneve_configure(net, dev, &geneve_remote_unspec,
0, 0, 0, 0, htons(dst_port), true,
GENEVE_F_UDP_ZERO_CSUM6_RX);
if (err)
goto err;
if (err) {
free_netdev(dev);
return ERR_PTR(err);
}

/* openvswitch users expect packet sizes to be unrestricted,
* so set the largest MTU we can.
Expand All @@ -1620,7 +1623,8 @@ struct net_device *rpl_geneve_dev_create_fb(struct net *net, const char *name,
return dev;

err:
free_netdev(dev);
geneve_dellink(dev, &list_kill);
unregister_netdevice_many(&list_kill);
return ERR_PTR(err);
}
EXPORT_SYMBOL_GPL(rpl_geneve_dev_create_fb);
Expand Down
14 changes: 7 additions & 7 deletions datapath/linux/compat/ip_gre.c
Expand Up @@ -620,6 +620,7 @@ struct net_device *rpl_gretap_fb_dev_create(struct net *net, const char *name,
{
struct nlattr *tb[IFLA_MAX + 1];
struct net_device *dev;
LIST_HEAD(list_kill);
struct ip_tunnel *t;
int err;

Expand All @@ -633,13 +634,11 @@ struct net_device *rpl_gretap_fb_dev_create(struct net *net, const char *name,
t = netdev_priv(dev);
t->collect_md = true;
/* Configure flow based GRE device. */
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,39)
err = ipgre_newlink(net, dev, tb, NULL);
#else
err = ipgre_newlink(dev, tb, NULL);
#endif
if (err < 0)
goto out;
if (err < 0) {
free_netdev(dev);
return ERR_PTR(err);
}

/* openvswitch users expect packet sizes to be unrestricted,
* so set the largest MTU we can.
Expand All @@ -650,7 +649,8 @@ struct net_device *rpl_gretap_fb_dev_create(struct net *net, const char *name,

return dev;
out:
free_netdev(dev);
ip_tunnel_dellink(dev, &list_kill);
unregister_netdevice_many(&list_kill);
return ERR_PTR(err);
}
EXPORT_SYMBOL_GPL(rpl_gretap_fb_dev_create);
Expand Down

0 comments on commit 7cecb9c

Please sign in to comment.