Commit a4b7cfae authored by Chris Leech's avatar Chris Leech Committed by James Bottomley

[SCSI] libfcoe: fcoe_ctlr_destroy use cancel_work_sync instead of flush_work

Use cancel_work_sync() in place of flush_work(), so that
fcoe_ctlr_destroy() can be called from a workqueue.

Also, purge the receive queue after the recv_work has been cancled because
if recv_work isn't run it's not guaranteed to be empty now.
Signed-off-by: default avatarChris Leech <christopher.leech@intel.com>
Signed-off-by: default avatarRobert Love <robert.w.love@intel.com>
Signed-off-by: default avatarJames Bottomley <James.Bottomley@suse.de>
parent 05cc7390
...@@ -148,13 +148,17 @@ static void fcoe_ctlr_reset_fcfs(struct fcoe_ctlr *fip) ...@@ -148,13 +148,17 @@ static void fcoe_ctlr_reset_fcfs(struct fcoe_ctlr *fip)
*/ */
void fcoe_ctlr_destroy(struct fcoe_ctlr *fip) void fcoe_ctlr_destroy(struct fcoe_ctlr *fip)
{ {
flush_work(&fip->recv_work); cancel_work_sync(&fip->recv_work);
spin_lock_bh(&fip->fip_recv_list.lock);
__skb_queue_purge(&fip->fip_recv_list);
spin_unlock_bh(&fip->fip_recv_list.lock);
spin_lock_bh(&fip->lock); spin_lock_bh(&fip->lock);
fip->state = FIP_ST_DISABLED; fip->state = FIP_ST_DISABLED;
fcoe_ctlr_reset_fcfs(fip); fcoe_ctlr_reset_fcfs(fip);
spin_unlock_bh(&fip->lock); spin_unlock_bh(&fip->lock);
del_timer_sync(&fip->timer); del_timer_sync(&fip->timer);
flush_work(&fip->link_work); cancel_work_sync(&fip->link_work);
} }
EXPORT_SYMBOL(fcoe_ctlr_destroy); EXPORT_SYMBOL(fcoe_ctlr_destroy);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment