diff options
Diffstat (limited to 'drivers/net/geneve.c')
-rw-r--r-- | drivers/net/geneve.c | 22 |
1 files changed, 15 insertions, 7 deletions
diff --git a/drivers/net/geneve.c b/drivers/net/geneve.c index aa61708bea69..310e0b9c2657 100644 --- a/drivers/net/geneve.c +++ b/drivers/net/geneve.c | |||
@@ -922,8 +922,8 @@ tx_error: | |||
922 | dev->stats.collisions++; | 922 | dev->stats.collisions++; |
923 | else if (err == -ENETUNREACH) | 923 | else if (err == -ENETUNREACH) |
924 | dev->stats.tx_carrier_errors++; | 924 | dev->stats.tx_carrier_errors++; |
925 | else | 925 | |
926 | dev->stats.tx_errors++; | 926 | dev->stats.tx_errors++; |
927 | return NETDEV_TX_OK; | 927 | return NETDEV_TX_OK; |
928 | } | 928 | } |
929 | 929 | ||
@@ -1012,8 +1012,8 @@ tx_error: | |||
1012 | dev->stats.collisions++; | 1012 | dev->stats.collisions++; |
1013 | else if (err == -ENETUNREACH) | 1013 | else if (err == -ENETUNREACH) |
1014 | dev->stats.tx_carrier_errors++; | 1014 | dev->stats.tx_carrier_errors++; |
1015 | else | 1015 | |
1016 | dev->stats.tx_errors++; | 1016 | dev->stats.tx_errors++; |
1017 | return NETDEV_TX_OK; | 1017 | return NETDEV_TX_OK; |
1018 | } | 1018 | } |
1019 | #endif | 1019 | #endif |
@@ -1463,6 +1463,7 @@ struct net_device *geneve_dev_create_fb(struct net *net, const char *name, | |||
1463 | { | 1463 | { |
1464 | struct nlattr *tb[IFLA_MAX + 1]; | 1464 | struct nlattr *tb[IFLA_MAX + 1]; |
1465 | struct net_device *dev; | 1465 | struct net_device *dev; |
1466 | LIST_HEAD(list_kill); | ||
1466 | int err; | 1467 | int err; |
1467 | 1468 | ||
1468 | memset(tb, 0, sizeof(tb)); | 1469 | memset(tb, 0, sizeof(tb)); |
@@ -1474,8 +1475,10 @@ struct net_device *geneve_dev_create_fb(struct net *net, const char *name, | |||
1474 | err = geneve_configure(net, dev, &geneve_remote_unspec, | 1475 | err = geneve_configure(net, dev, &geneve_remote_unspec, |
1475 | 0, 0, 0, 0, htons(dst_port), true, | 1476 | 0, 0, 0, 0, htons(dst_port), true, |
1476 | GENEVE_F_UDP_ZERO_CSUM6_RX); | 1477 | GENEVE_F_UDP_ZERO_CSUM6_RX); |
1477 | if (err) | 1478 | if (err) { |
1478 | goto err; | 1479 | free_netdev(dev); |
1480 | return ERR_PTR(err); | ||
1481 | } | ||
1479 | 1482 | ||
1480 | /* openvswitch users expect packet sizes to be unrestricted, | 1483 | /* openvswitch users expect packet sizes to be unrestricted, |
1481 | * so set the largest MTU we can. | 1484 | * so set the largest MTU we can. |
@@ -1484,10 +1487,15 @@ struct net_device *geneve_dev_create_fb(struct net *net, const char *name, | |||
1484 | if (err) | 1487 | if (err) |
1485 | goto err; | 1488 | goto err; |
1486 | 1489 | ||
1490 | err = rtnl_configure_link(dev, NULL); | ||
1491 | if (err < 0) | ||
1492 | goto err; | ||
1493 | |||
1487 | return dev; | 1494 | return dev; |
1488 | 1495 | ||
1489 | err: | 1496 | err: |
1490 | free_netdev(dev); | 1497 | geneve_dellink(dev, &list_kill); |
1498 | unregister_netdevice_many(&list_kill); | ||
1491 | return ERR_PTR(err); | 1499 | return ERR_PTR(err); |
1492 | } | 1500 | } |
1493 | EXPORT_SYMBOL_GPL(geneve_dev_create_fb); | 1501 | EXPORT_SYMBOL_GPL(geneve_dev_create_fb); |