bonding: fix potential deadlock in bond_uninit()
authorAmerigo Wang <amwang@redhat.com>
Wed, 31 Mar 2010 21:30:52 +0000 (21:30 +0000)
committerDavid S. Miller <davem@davemloft.net>
Fri, 2 Apr 2010 00:26:01 +0000 (17:26 -0700)
commit9e2e61fbf8ad016d24e4af0afff13505f3dd2a2a
treee469e69cc59b860713ac18227932c017a739564f
parent6503d96168f891ffa3b70ae6c9698a1a722025a0
bonding: fix potential deadlock in bond_uninit()

bond_uninit() is invoked with rtnl_lock held, when it does destroy_workqueue()
which will potentially flush all works in this workqueue, if we hold rtnl_lock
again in the work function, it will deadlock.

So move destroy_workqueue() to destructor where rtnl_lock is not held any more,
suggested by Eric.

Signed-off-by: WANG Cong <amwang@redhat.com>
Cc: Jay Vosburgh <fubar@us.ibm.com>
Cc: "David S. Miller" <davem@davemloft.net>
Cc: Stephen Hemminger <shemminger@vyatta.com>
Cc: Jiri Pirko <jpirko@redhat.com>
Cc: "Eric W. Biederman" <ebiederm@xmission.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/bonding/bond_main.c