IB/ipoib: Use cancel_delayed_work_sync when needed
The work mcast_task can re-queue itself, so instead of doing cancel && flush_workqueue, that still can leave a queued task on the air, use cancel_delayed_work_sync. Also, no need to use lock over the cancel, the original lock was due to bit assignment setting (IPOIB_MCAST_RUN) that is not in use anymore. Signed-off-by: Erez Shitrit <erezsh@mellanox.com> Signed-off-by: Leon Romanovsky <leon@kernel.org>
This commit is contained in:
parent
edf3f301db
commit
6bdc8de2e8
|
@ -684,15 +684,10 @@ void ipoib_mcast_start_thread(struct net_device *dev)
|
|||
int ipoib_mcast_stop_thread(struct net_device *dev)
|
||||
{
|
||||
struct ipoib_dev_priv *priv = ipoib_priv(dev);
|
||||
unsigned long flags;
|
||||
|
||||
ipoib_dbg_mcast(priv, "stopping multicast thread\n");
|
||||
|
||||
spin_lock_irqsave(&priv->lock, flags);
|
||||
cancel_delayed_work(&priv->mcast_task);
|
||||
spin_unlock_irqrestore(&priv->lock, flags);
|
||||
|
||||
flush_workqueue(priv->wq);
|
||||
cancel_delayed_work_sync(&priv->mcast_task);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue