mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-23 09:19:51 +00:00
[SCSI] bnx2fc: cleanup task management IO when it times out.
When the task management IO times out, or a flush operation is performed while task management IO is pending, driver is not cleaning up the IO. This patch cleans up the IO for the above cases. Signed-off-by: Bhanu Prakash Gollapudi <bprakash@broadcom.com> Signed-off-by: James Bottomley <JBottomley@Parallels.com>
This commit is contained in:
parent
c1bb4f33de
commit
92886c9c97
2 changed files with 25 additions and 1 deletions
|
@ -810,8 +810,22 @@ static int bnx2fc_initiate_tmf(struct scsi_cmnd *sc_cmd, u8 tm_flags)
|
|||
spin_lock_bh(&tgt->tgt_lock);
|
||||
|
||||
io_req->wait_for_comp = 0;
|
||||
if (!(test_bit(BNX2FC_FLAG_TM_COMPL, &io_req->req_flags)))
|
||||
if (!(test_bit(BNX2FC_FLAG_TM_COMPL, &io_req->req_flags))) {
|
||||
set_bit(BNX2FC_FLAG_TM_TIMEOUT, &io_req->req_flags);
|
||||
if (io_req->on_tmf_queue) {
|
||||
list_del_init(&io_req->link);
|
||||
io_req->on_tmf_queue = 0;
|
||||
}
|
||||
io_req->wait_for_comp = 1;
|
||||
bnx2fc_initiate_cleanup(io_req);
|
||||
spin_unlock_bh(&tgt->tgt_lock);
|
||||
rc = wait_for_completion_timeout(&io_req->tm_done,
|
||||
BNX2FC_FW_TIMEOUT);
|
||||
spin_lock_bh(&tgt->tgt_lock);
|
||||
io_req->wait_for_comp = 0;
|
||||
if (!rc)
|
||||
kref_put(&io_req->refcount, bnx2fc_cmd_release);
|
||||
}
|
||||
|
||||
spin_unlock_bh(&tgt->tgt_lock);
|
||||
|
||||
|
|
|
@ -185,6 +185,16 @@ void bnx2fc_flush_active_ios(struct bnx2fc_rport *tgt)
|
|||
BUG_ON(rc);
|
||||
}
|
||||
|
||||
list_for_each_safe(list, tmp, &tgt->active_tm_queue) {
|
||||
i++;
|
||||
io_req = (struct bnx2fc_cmd *)list;
|
||||
list_del_init(&io_req->link);
|
||||
io_req->on_tmf_queue = 0;
|
||||
BNX2FC_IO_DBG(io_req, "tm_queue cleanup\n");
|
||||
if (io_req->wait_for_comp)
|
||||
complete(&io_req->tm_done);
|
||||
}
|
||||
|
||||
list_for_each_safe(list, tmp, &tgt->els_queue) {
|
||||
i++;
|
||||
io_req = (struct bnx2fc_cmd *)list;
|
||||
|
|
Loading…
Reference in a new issue