iseries_veth: don't use flush_scheduled_work()
flush_scheduled_work() is on its way out. Remove its usage from iseries_veth. * Cancelling a delayed work, queueing it for immediate execution if cancelled and then waiting for completion can be done by simply calling flush_delayed_work_sync(). * Explicitly cancel cnx->statemachine_wq on module unload. Signed-off-by: Tejun Heo <tj@kernel.org> Cc: "David S. Miller" <davem@davemloft.net> Cc: Santiago Leon <santil@linux.vnet.ibm.com> Cc: netdev@vger.kernel.org
This commit is contained in:
parent
f5c35cc191
commit
9beb4896ce
1 changed files with 4 additions and 14 deletions
|
@ -885,17 +885,8 @@ static void veth_stop_connection(struct veth_lpar_connection *cnx)
|
|||
veth_kick_statemachine(cnx);
|
||||
spin_unlock_irq(&cnx->lock);
|
||||
|
||||
/* There's a slim chance the reset code has just queued the
|
||||
* statemachine to run in five seconds. If so we need to cancel
|
||||
* that and requeue the work to run now. */
|
||||
if (cancel_delayed_work(&cnx->statemachine_wq)) {
|
||||
spin_lock_irq(&cnx->lock);
|
||||
veth_kick_statemachine(cnx);
|
||||
spin_unlock_irq(&cnx->lock);
|
||||
}
|
||||
|
||||
/* Wait for the state machine to run. */
|
||||
flush_scheduled_work();
|
||||
/* ensure the statemachine runs now and waits for its completion */
|
||||
flush_delayed_work_sync(&cnx->statemachine_wq);
|
||||
}
|
||||
|
||||
static void veth_destroy_connection(struct veth_lpar_connection *cnx)
|
||||
|
@ -1653,15 +1644,14 @@ static void __exit veth_module_cleanup(void)
|
|||
/* Disconnect our "irq" to stop events coming from the Hypervisor. */
|
||||
HvLpEvent_unregisterHandler(HvLpEvent_Type_VirtualLan);
|
||||
|
||||
/* Make sure any work queued from Hypervisor callbacks is finished. */
|
||||
flush_scheduled_work();
|
||||
|
||||
for (i = 0; i < HVMAXARCHITECTEDLPS; ++i) {
|
||||
cnx = veth_cnx[i];
|
||||
|
||||
if (!cnx)
|
||||
continue;
|
||||
|
||||
/* Cancel work queued from Hypervisor callbacks */
|
||||
cancel_delayed_work_sync(&cnx->statemachine_wq);
|
||||
/* Remove the connection from sysfs */
|
||||
kobject_del(&cnx->kobject);
|
||||
/* Drop the driver's reference to the connection */
|
||||
|
|
Loading…
Reference in a new issue