diff options
author | Jiri Pirko <jiri@resnulli.us> | 2013-01-03 17:48:50 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2013-01-04 16:31:49 -0500 |
commit | 7cd43db77eed83ce9c2086edb402748256e05f14 (patch) | |
tree | 3deef53e843a46181bd9042ca336445826c3c3b3 /drivers/net/macvlan.c | |
parent | 9ff162a8b96c96238773972e26288a366e403b0c (diff) |
macvlan: add link to upper device
Signed-off-by: Jiri Pirko <jiri@resnulli.us>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/macvlan.c')
-rw-r--r-- | drivers/net/macvlan.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/drivers/net/macvlan.c b/drivers/net/macvlan.c index 80c6f927a7b4..0ae45182f40d 100644 --- a/drivers/net/macvlan.c +++ b/drivers/net/macvlan.c | |||
@@ -764,16 +764,22 @@ int macvlan_common_newlink(struct net *src_net, struct net_device *dev, | |||
764 | memcpy(dev->dev_addr, lowerdev->dev_addr, ETH_ALEN); | 764 | memcpy(dev->dev_addr, lowerdev->dev_addr, ETH_ALEN); |
765 | } | 765 | } |
766 | 766 | ||
767 | err = netdev_upper_dev_link(lowerdev, dev); | ||
768 | if (err) | ||
769 | goto destroy_port; | ||
770 | |||
767 | port->count += 1; | 771 | port->count += 1; |
768 | err = register_netdevice(dev); | 772 | err = register_netdevice(dev); |
769 | if (err < 0) | 773 | if (err < 0) |
770 | goto destroy_port; | 774 | goto upper_dev_unlink; |
771 | 775 | ||
772 | list_add_tail(&vlan->list, &port->vlans); | 776 | list_add_tail(&vlan->list, &port->vlans); |
773 | netif_stacked_transfer_operstate(lowerdev, dev); | 777 | netif_stacked_transfer_operstate(lowerdev, dev); |
774 | 778 | ||
775 | return 0; | 779 | return 0; |
776 | 780 | ||
781 | upper_dev_unlink: | ||
782 | netdev_upper_dev_unlink(lowerdev, dev); | ||
777 | destroy_port: | 783 | destroy_port: |
778 | port->count -= 1; | 784 | port->count -= 1; |
779 | if (!port->count) | 785 | if (!port->count) |
@@ -797,6 +803,7 @@ void macvlan_dellink(struct net_device *dev, struct list_head *head) | |||
797 | 803 | ||
798 | list_del(&vlan->list); | 804 | list_del(&vlan->list); |
799 | unregister_netdevice_queue(dev, head); | 805 | unregister_netdevice_queue(dev, head); |
806 | netdev_upper_dev_unlink(vlan->lowerdev, dev); | ||
800 | } | 807 | } |
801 | EXPORT_SYMBOL_GPL(macvlan_dellink); | 808 | EXPORT_SYMBOL_GPL(macvlan_dellink); |
802 | 809 | ||