Skip to content

Commit

Permalink
bonding: fix panic if initialization fails
Browse files Browse the repository at this point in the history
If module initialisation failed (e.g. because the bonding sysfs entry
cannot be created), kernel panics:
 IP: [<ffffffff8024910a>] destroy_workqueue+0x2d/0x146
Call Trace:
 [<ffffffff808268c4>] bond_destructor+0x28/0x78
 [<ffffffff80b64471>] netdev_run_todo+0x231/0x25a
 [<ffffffff80b6dbcd>] rtnl_unlock+0x9/0xb
 [<ffffffff81567907>] bonding_init+0x83e/0x84a

Remove the calls to bond_work_cancel_all() and destroy_workqueue();
both are also called/scheduled via bond_free_all().

bond_destroy_sysfs is unecessary because the sysfs entry has
not been created in the error case.

Signed-off-by: Florian Westphal <fw@strlen.de>
Signed-off-by: Jay Vosburgh <fubar@us.ibm.com>
Signed-off-by: Jiri Pirko <jpirko@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Florian Westphal authored and David S. Miller committed May 9, 2009
1 parent be8be9e commit 9d34d1a
Showing 1 changed file with 0 additions and 8 deletions.
8 changes: 0 additions & 8 deletions drivers/net/bonding/bond_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -5181,7 +5181,6 @@ static int __init bonding_init(void)
{
int i;
int res;
struct bonding *bond;

printk(KERN_INFO "%s", version);

Expand Down Expand Up @@ -5212,13 +5211,6 @@ static int __init bonding_init(void)

goto out;
err:
list_for_each_entry(bond, &bond_dev_list, bond_list) {
bond_work_cancel_all(bond);
destroy_workqueue(bond->wq);
}

bond_destroy_sysfs();

rtnl_lock();
bond_free_all();
rtnl_unlock();
Expand Down

0 comments on commit 9d34d1a

Please sign in to comment.