diff options
author | Gao Feng <fgao@ikuai8.com> | 2016-12-07 22:16:58 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2016-12-08 14:30:07 -0500 |
commit | 1a31cc86ef3ce9d873a713f422c34b47a188caec (patch) | |
tree | c6f57407f75fe9f8d27dc8428c440690e1f44ea1 /drivers/net/ipvlan/ipvlan_main.c | |
parent | 93a97c50cbf1c007caf12db5cc23e0d5b9c8473c (diff) |
driver: ipvlan: Unlink the upper dev when ipvlan_link_new failed
When netdev_upper_dev_unlink failed in ipvlan_link_new, need to
unlink the ipvlan dev with upper dev.
Signed-off-by: Gao Feng <fgao@ikuai8.com>
Acked-by: Mahesh Bandewar <maheshb@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ipvlan/ipvlan_main.c')
-rw-r--r-- | drivers/net/ipvlan/ipvlan_main.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/drivers/net/ipvlan/ipvlan_main.c b/drivers/net/ipvlan/ipvlan_main.c index 0fef17874d50..dfbc4ef6d507 100644 --- a/drivers/net/ipvlan/ipvlan_main.c +++ b/drivers/net/ipvlan/ipvlan_main.c | |||
@@ -546,13 +546,15 @@ static int ipvlan_link_new(struct net *src_net, struct net_device *dev, | |||
546 | } | 546 | } |
547 | err = ipvlan_set_port_mode(port, mode); | 547 | err = ipvlan_set_port_mode(port, mode); |
548 | if (err) { | 548 | if (err) { |
549 | goto unregister_netdev; | 549 | goto unlink_netdev; |
550 | } | 550 | } |
551 | 551 | ||
552 | list_add_tail_rcu(&ipvlan->pnode, &port->ipvlans); | 552 | list_add_tail_rcu(&ipvlan->pnode, &port->ipvlans); |
553 | netif_stacked_transfer_operstate(phy_dev, dev); | 553 | netif_stacked_transfer_operstate(phy_dev, dev); |
554 | return 0; | 554 | return 0; |
555 | 555 | ||
556 | unlink_netdev: | ||
557 | netdev_upper_dev_unlink(phy_dev, dev); | ||
556 | unregister_netdev: | 558 | unregister_netdev: |
557 | unregister_netdevice(dev); | 559 | unregister_netdevice(dev); |
558 | destroy_ipvlan_port: | 560 | destroy_ipvlan_port: |