diff options
-rw-r--r-- | drivers/net/bonding/bond_main.c | 21 | ||||
-rw-r--r-- | drivers/net/bonding/bond_sysfs.c | 2 | ||||
-rw-r--r-- | drivers/net/bonding/bonding.h | 1 |
3 files changed, 9 insertions, 15 deletions
diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c index 23b832ffe7a..2fc3561e099 100644 --- a/drivers/net/bonding/bond_main.c +++ b/drivers/net/bonding/bond_main.c | |||
@@ -1972,25 +1972,19 @@ int bond_release(struct net_device *bond_dev, struct net_device *slave_dev) | |||
1972 | * Destroy a bonding device. | 1972 | * Destroy a bonding device. |
1973 | * Must be under rtnl_lock when this function is called. | 1973 | * Must be under rtnl_lock when this function is called. |
1974 | */ | 1974 | */ |
1975 | void bond_destroy(struct bonding *bond) | 1975 | static void bond_uninit(struct net_device *bond_dev) |
1976 | { | ||
1977 | bond_deinit(bond->dev); | ||
1978 | bond_destroy_sysfs_entry(bond); | ||
1979 | unregister_netdevice(bond->dev); | ||
1980 | } | ||
1981 | |||
1982 | static void bond_destructor(struct net_device *bond_dev) | ||
1983 | { | 1976 | { |
1984 | struct bonding *bond = netdev_priv(bond_dev); | 1977 | struct bonding *bond = netdev_priv(bond_dev); |
1985 | 1978 | ||
1979 | bond_deinit(bond_dev); | ||
1980 | bond_destroy_sysfs_entry(bond); | ||
1981 | |||
1986 | if (bond->wq) | 1982 | if (bond->wq) |
1987 | destroy_workqueue(bond->wq); | 1983 | destroy_workqueue(bond->wq); |
1988 | 1984 | ||
1989 | netif_addr_lock_bh(bond_dev); | 1985 | netif_addr_lock_bh(bond_dev); |
1990 | bond_mc_list_destroy(bond); | 1986 | bond_mc_list_destroy(bond); |
1991 | netif_addr_unlock_bh(bond_dev); | 1987 | netif_addr_unlock_bh(bond_dev); |
1992 | |||
1993 | free_netdev(bond_dev); | ||
1994 | } | 1988 | } |
1995 | 1989 | ||
1996 | /* | 1990 | /* |
@@ -2006,7 +2000,7 @@ int bond_release_and_destroy(struct net_device *bond_dev, struct net_device *sl | |||
2006 | if ((ret == 0) && (bond->slave_cnt == 0)) { | 2000 | if ((ret == 0) && (bond->slave_cnt == 0)) { |
2007 | printk(KERN_INFO DRV_NAME ": %s: destroying bond %s.\n", | 2001 | printk(KERN_INFO DRV_NAME ": %s: destroying bond %s.\n", |
2008 | bond_dev->name, bond_dev->name); | 2002 | bond_dev->name, bond_dev->name); |
2009 | bond_destroy(bond); | 2003 | unregister_netdevice(bond_dev); |
2010 | } | 2004 | } |
2011 | return ret; | 2005 | return ret; |
2012 | } | 2006 | } |
@@ -4572,6 +4566,7 @@ static const struct ethtool_ops bond_ethtool_ops = { | |||
4572 | }; | 4566 | }; |
4573 | 4567 | ||
4574 | static const struct net_device_ops bond_netdev_ops = { | 4568 | static const struct net_device_ops bond_netdev_ops = { |
4569 | .ndo_uninit = bond_uninit, | ||
4575 | .ndo_open = bond_open, | 4570 | .ndo_open = bond_open, |
4576 | .ndo_stop = bond_close, | 4571 | .ndo_stop = bond_close, |
4577 | .ndo_start_xmit = bond_start_xmit, | 4572 | .ndo_start_xmit = bond_start_xmit, |
@@ -4622,7 +4617,7 @@ static int bond_init(struct net_device *bond_dev) | |||
4622 | bond_dev->ethtool_ops = &bond_ethtool_ops; | 4617 | bond_dev->ethtool_ops = &bond_ethtool_ops; |
4623 | bond_set_mode_ops(bond, bond->params.mode); | 4618 | bond_set_mode_ops(bond, bond->params.mode); |
4624 | 4619 | ||
4625 | bond_dev->destructor = bond_destructor; | 4620 | bond_dev->destructor = free_netdev; |
4626 | 4621 | ||
4627 | /* Initialize the device options */ | 4622 | /* Initialize the device options */ |
4628 | bond_dev->tx_queue_len = 0; | 4623 | bond_dev->tx_queue_len = 0; |
@@ -4706,7 +4701,7 @@ static void bond_free_all(void) | |||
4706 | bond_work_cancel_all(bond); | 4701 | bond_work_cancel_all(bond); |
4707 | /* Release the bonded slaves */ | 4702 | /* Release the bonded slaves */ |
4708 | bond_release_all(bond_dev); | 4703 | bond_release_all(bond_dev); |
4709 | bond_destroy(bond); | 4704 | unregister_netdevice(bond_dev); |
4710 | } | 4705 | } |
4711 | 4706 | ||
4712 | bond_destroy_proc_dir(); | 4707 | bond_destroy_proc_dir(); |
diff --git a/drivers/net/bonding/bond_sysfs.c b/drivers/net/bonding/bond_sysfs.c index 8041b679353..72357597fa1 100644 --- a/drivers/net/bonding/bond_sysfs.c +++ b/drivers/net/bonding/bond_sysfs.c | |||
@@ -127,7 +127,7 @@ static ssize_t bonding_store_bonds(struct class *cls, const char *buffer, size_t | |||
127 | printk(KERN_INFO DRV_NAME | 127 | printk(KERN_INFO DRV_NAME |
128 | ": %s is being deleted...\n", | 128 | ": %s is being deleted...\n", |
129 | bond->dev->name); | 129 | bond->dev->name); |
130 | bond_destroy(bond); | 130 | unregister_netdevice(bond->dev); |
131 | goto out_unlock; | 131 | goto out_unlock; |
132 | } | 132 | } |
133 | 133 | ||
diff --git a/drivers/net/bonding/bonding.h b/drivers/net/bonding/bonding.h index af81e9b7fe3..6290a502742 100644 --- a/drivers/net/bonding/bonding.h +++ b/drivers/net/bonding/bonding.h | |||
@@ -322,7 +322,6 @@ static inline void bond_unset_master_alb_flags(struct bonding *bond) | |||
322 | struct vlan_entry *bond_next_vlan(struct bonding *bond, struct vlan_entry *curr); | 322 | struct vlan_entry *bond_next_vlan(struct bonding *bond, struct vlan_entry *curr); |
323 | int bond_dev_queue_xmit(struct bonding *bond, struct sk_buff *skb, struct net_device *slave_dev); | 323 | int bond_dev_queue_xmit(struct bonding *bond, struct sk_buff *skb, struct net_device *slave_dev); |
324 | int bond_create(const char *name); | 324 | int bond_create(const char *name); |
325 | void bond_destroy(struct bonding *bond); | ||
326 | int bond_release_and_destroy(struct net_device *bond_dev, struct net_device *slave_dev); | 325 | int bond_release_and_destroy(struct net_device *bond_dev, struct net_device *slave_dev); |
327 | int bond_create_sysfs(void); | 326 | int bond_create_sysfs(void); |
328 | void bond_destroy_sysfs(void); | 327 | void bond_destroy_sysfs(void); |