From: Michael Chan Date: Thu, 25 Aug 2005 22:34:29 +0000 (-0700) Subject: [BNX2]: Fix rtnl deadlock in bnx2_close X-Git-Tag: v2.6.14-rc1~1035^2~25 X-Git-Url: http://git.openpandora.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=afdc08b9f9a7174d7912a160f657f39d46379b5e;p=pandora-kernel.git [BNX2]: Fix rtnl deadlock in bnx2_close This fixes an rtnl deadlock problem when flush_scheduled_work() is called from bnx2_close(). In rare cases, linkwatch_event() may be on the workqueue from a previous close of a different device and it will try to get the rtnl lock which is already held by dev_close(). The fix is to set a flag if we are in the reset task which is run from the workqueue. bnx2_close() will loop until the flag is cleared. As suggested by Jeff Garzik, the loop is changed to call msleep(1) instead of yield() in the original patch. flush_scheduled_work() is also moved to bnx2_remove_one() before the netdev is freed. Signed-off-by: Michael Chan Signed-off-by: David S. Miller --- Reading git-diff-tree failed