diff options
-rw-r--r-- | drivers/net/bonding/bond_main.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c index 0c0dacba1f51..435984ad8b2f 100644 --- a/drivers/net/bonding/bond_main.c +++ b/drivers/net/bonding/bond_main.c | |||
@@ -1822,7 +1822,7 @@ int bond_enslave(struct net_device *bond_dev, struct net_device *slave_dev) | |||
1822 | "but new slave device does not support netpoll.\n", | 1822 | "but new slave device does not support netpoll.\n", |
1823 | bond_dev->name); | 1823 | bond_dev->name); |
1824 | res = -EBUSY; | 1824 | res = -EBUSY; |
1825 | goto err_close; | 1825 | goto err_detach; |
1826 | } | 1826 | } |
1827 | } | 1827 | } |
1828 | #endif | 1828 | #endif |
@@ -1831,7 +1831,7 @@ int bond_enslave(struct net_device *bond_dev, struct net_device *slave_dev) | |||
1831 | 1831 | ||
1832 | res = bond_create_slave_symlinks(bond_dev, slave_dev); | 1832 | res = bond_create_slave_symlinks(bond_dev, slave_dev); |
1833 | if (res) | 1833 | if (res) |
1834 | goto err_close; | 1834 | goto err_detach; |
1835 | 1835 | ||
1836 | res = netdev_rx_handler_register(slave_dev, bond_handle_frame, | 1836 | res = netdev_rx_handler_register(slave_dev, bond_handle_frame, |
1837 | new_slave); | 1837 | new_slave); |
@@ -1852,6 +1852,11 @@ int bond_enslave(struct net_device *bond_dev, struct net_device *slave_dev) | |||
1852 | err_dest_symlinks: | 1852 | err_dest_symlinks: |
1853 | bond_destroy_slave_symlinks(bond_dev, slave_dev); | 1853 | bond_destroy_slave_symlinks(bond_dev, slave_dev); |
1854 | 1854 | ||
1855 | err_detach: | ||
1856 | write_lock_bh(&bond->lock); | ||
1857 | bond_detach_slave(bond, new_slave); | ||
1858 | write_unlock_bh(&bond->lock); | ||
1859 | |||
1855 | err_close: | 1860 | err_close: |
1856 | dev_close(slave_dev); | 1861 | dev_close(slave_dev); |
1857 | 1862 | ||