Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6bdc8de2 authored by Erez Shitrit's avatar Erez Shitrit Committed by Leon Romanovsky
Browse files

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: default avatarErez Shitrit <erezsh@mellanox.com>
Signed-off-by: default avatarLeon Romanovsky <leon@kernel.org>
parent edf3f301
Loading
Loading
Loading
Loading
+1 −6
Original line number Original line Diff line number Diff line
@@ -684,15 +684,10 @@ void ipoib_mcast_start_thread(struct net_device *dev)
int ipoib_mcast_stop_thread(struct net_device *dev)
int ipoib_mcast_stop_thread(struct net_device *dev)
{
{
	struct ipoib_dev_priv *priv = ipoib_priv(dev);
	struct ipoib_dev_priv *priv = ipoib_priv(dev);
	unsigned long flags;


	ipoib_dbg_mcast(priv, "stopping multicast thread\n");
	ipoib_dbg_mcast(priv, "stopping multicast thread\n");


	spin_lock_irqsave(&priv->lock, flags);
	cancel_delayed_work_sync(&priv->mcast_task);
	cancel_delayed_work(&priv->mcast_task);
	spin_unlock_irqrestore(&priv->lock, flags);

	flush_workqueue(priv->wq);


	return 0;
	return 0;
}
}