aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/net/bonding/bond_main.c9
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)
1852err_dest_symlinks: 1852err_dest_symlinks:
1853 bond_destroy_slave_symlinks(bond_dev, slave_dev); 1853 bond_destroy_slave_symlinks(bond_dev, slave_dev);
1854 1854
1855err_detach:
1856 write_lock_bh(&bond->lock);
1857 bond_detach_slave(bond, new_slave);
1858 write_unlock_bh(&bond->lock);
1859
1855err_close: 1860err_close:
1856 dev_close(slave_dev); 1861 dev_close(slave_dev);
1857 1862