aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorMichael S. Tsirkin <mst@mellanox.co.il>2005-08-24 17:41:51 -0400
committerRoland Dreier <rolandd@cisco.com>2005-08-26 23:37:38 -0400
commit1ad62a19f177e61d4dde111ba35fb4badd0c2106 (patch)
treee427260a9049b1300fe69c7542bdb4a85fa2fa9a /drivers
parentfe9e08e17af414a5fd8f3141b0fd88677f81a883 (diff)
[PATCH] IPoIB: Fix device removal race
Currently we may have work scheduled in default kernel workqueue when the device is going down. The device could get freed before this workqueue gets serviced. I am actually seeing this causing system hangs. The following patch fixes this by using ipoib_workqueue which gets flushed when the device is going down. Signed-off-by: Michael S. Tsirkin <mst@mellanox.co.il> Signed-off-by: Roland Dreier <rolandd@cisco.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/infiniband/ulp/ipoib/ipoib_main.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/infiniband/ulp/ipoib/ipoib_main.c b/drivers/infiniband/ulp/ipoib/ipoib_main.c
index 57c3ac98991f..0e8ac138e355 100644
--- a/drivers/infiniband/ulp/ipoib/ipoib_main.c
+++ b/drivers/infiniband/ulp/ipoib/ipoib_main.c
@@ -672,7 +672,7 @@ static void ipoib_set_mcast_list(struct net_device *dev)
672{ 672{
673 struct ipoib_dev_priv *priv = netdev_priv(dev); 673 struct ipoib_dev_priv *priv = netdev_priv(dev);
674 674
675 schedule_work(&priv->restart_task); 675 queue_work(ipoib_workqueue, &priv->restart_task);
676} 676}
677 677
678static void ipoib_neigh_destructor(struct neighbour *n) 678static void ipoib_neigh_destructor(struct neighbour *n)