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 cadefe4fdaa2..cc39cefeae45 100644 --- a/drivers/net/geneve.c +++ b/drivers/net/geneve.c | |||
@@ -958,8 +958,8 @@ tx_error: | |||
958 | dev->stats.collisions++; | 958 | dev->stats.collisions++; |
959 | else if (err == -ENETUNREACH) | 959 | else if (err == -ENETUNREACH) |
960 | dev->stats.tx_carrier_errors++; | 960 | dev->stats.tx_carrier_errors++; |
961 | else | 961 | |
962 | dev->stats.tx_errors++; | 962 | dev->stats.tx_errors++; |
963 | return NETDEV_TX_OK; | 963 | return NETDEV_TX_OK; |
964 | } | 964 | } |
965 | 965 | ||
@@ -1048,8 +1048,8 @@ tx_error: | |||
1048 | dev->stats.collisions++; | 1048 | dev->stats.collisions++; |
1049 | else if (err == -ENETUNREACH) | 1049 | else if (err == -ENETUNREACH) |
1050 | dev->stats.tx_carrier_errors++; | 1050 | dev->stats.tx_carrier_errors++; |
1051 | else | 1051 | |
1052 | dev->stats.tx_errors++; | 1052 | dev->stats.tx_errors++; |
1053 | return NETDEV_TX_OK; | 1053 | return NETDEV_TX_OK; |
1054 | } | 1054 | } |
1055 | #endif | 1055 | #endif |
@@ -1508,6 +1508,7 @@ struct net_device *geneve_dev_create_fb(struct net *net, const char *name, | |||
1508 | { | 1508 | { |
1509 | struct nlattr *tb[IFLA_MAX + 1]; | 1509 | struct nlattr *tb[IFLA_MAX + 1]; |
1510 | struct net_device *dev; | 1510 | struct net_device *dev; |
1511 | LIST_HEAD(list_kill); | ||
1511 | int err; | 1512 | int err; |
1512 | 1513 | ||
1513 | memset(tb, 0, sizeof(tb)); | 1514 | memset(tb, 0, sizeof(tb)); |
@@ -1519,8 +1520,10 @@ struct net_device *geneve_dev_create_fb(struct net *net, const char *name, | |||
1519 | err = geneve_configure(net, dev, &geneve_remote_unspec, | 1520 | err = geneve_configure(net, dev, &geneve_remote_unspec, |
1520 | 0, 0, 0, 0, htons(dst_port), true, | 1521 | 0, 0, 0, 0, htons(dst_port), true, |
1521 | GENEVE_F_UDP_ZERO_CSUM6_RX); | 1522 | GENEVE_F_UDP_ZERO_CSUM6_RX); |
1522 | if (err) | 1523 | if (err) { |
1523 | goto err; | 1524 | free_netdev(dev); |
1525 | return ERR_PTR(err); | ||
1526 | } | ||
1524 | 1527 | ||
1525 | /* openvswitch users expect packet sizes to be unrestricted, | 1528 | /* openvswitch users expect packet sizes to be unrestricted, |
1526 | * so set the largest MTU we can. | 1529 | * so set the largest MTU we can. |
@@ -1529,10 +1532,15 @@ struct net_device *geneve_dev_create_fb(struct net *net, const char *name, | |||
1529 | if (err) | 1532 | if (err) |
1530 | goto err; | 1533 | goto err; |
1531 | 1534 | ||
1535 | err = rtnl_configure_link(dev, NULL); | ||
1536 | if (err < 0) | ||
1537 | goto err; | ||
1538 | |||
1532 | return dev; | 1539 | return dev; |
1533 | 1540 | ||
1534 | err: | 1541 | err: |
1535 | free_netdev(dev); | 1542 | geneve_dellink(dev, &list_kill); |
1543 | unregister_netdevice_many(&list_kill); | ||
1536 | return ERR_PTR(err); | 1544 | return ERR_PTR(err); |
1537 | } | 1545 | } |
1538 | EXPORT_SYMBOL_GPL(geneve_dev_create_fb); | 1546 | EXPORT_SYMBOL_GPL(geneve_dev_create_fb); |