提交 5eb95af0 编写于 作者: J James.Smart@Emulex.Com 提交者: James Bottomley

[SCSI] lpfc: Add completion handler to the abort iocbs

Add completion handler to the abort iocbs to close a hole where we
could reuse an iotag.
Signed-off-by: NJames Smart <James.Smart@emulex.com>
Signed-off-by: NJames Bottomley <James.Bottomley@SteelEye.com>
上级 1f679caf
...@@ -195,6 +195,9 @@ int lpfc_sli_issue_iocb_wait_high_priority(struct lpfc_hba * phba, ...@@ -195,6 +195,9 @@ int lpfc_sli_issue_iocb_wait_high_priority(struct lpfc_hba * phba,
void lpfc_sli_wake_iocb_high_priority(struct lpfc_hba * phba, void lpfc_sli_wake_iocb_high_priority(struct lpfc_hba * phba,
struct lpfc_iocbq * queue1, struct lpfc_iocbq * queue1,
struct lpfc_iocbq * queue2); struct lpfc_iocbq * queue2);
void lpfc_sli_abort_fcp_cmpl(struct lpfc_hba * phba,
struct lpfc_iocbq * cmdiocb,
struct lpfc_iocbq * rspiocb);
void *lpfc_mbuf_alloc(struct lpfc_hba *, int, dma_addr_t *); void *lpfc_mbuf_alloc(struct lpfc_hba *, int, dma_addr_t *);
void lpfc_mbuf_free(struct lpfc_hba *, void *, dma_addr_t); void lpfc_mbuf_free(struct lpfc_hba *, void *, dma_addr_t);
......
...@@ -874,6 +874,7 @@ __lpfc_abort_handler(struct scsi_cmnd *cmnd) ...@@ -874,6 +874,7 @@ __lpfc_abort_handler(struct scsi_cmnd *cmnd)
else else
icmd->ulpCommand = CMD_CLOSE_XRI_CN; icmd->ulpCommand = CMD_CLOSE_XRI_CN;
abtsiocb->iocb_cmpl = lpfc_sli_abort_fcp_cmpl;
if (lpfc_sli_issue_iocb(phba, pring, abtsiocb, 0) == if (lpfc_sli_issue_iocb(phba, pring, abtsiocb, 0) ==
IOCB_ERROR) { IOCB_ERROR) {
list_add_tail(&abtsiocb->list, lpfc_iocb_list); list_add_tail(&abtsiocb->list, lpfc_iocb_list);
......
...@@ -2077,8 +2077,6 @@ lpfc_sli_issue_iocb(struct lpfc_hba *phba, struct lpfc_sli_ring *pring, ...@@ -2077,8 +2077,6 @@ lpfc_sli_issue_iocb(struct lpfc_hba *phba, struct lpfc_sli_ring *pring,
switch (piocb->iocb.ulpCommand) { switch (piocb->iocb.ulpCommand) {
case CMD_QUE_RING_BUF_CN: case CMD_QUE_RING_BUF_CN:
case CMD_QUE_RING_BUF64_CN: case CMD_QUE_RING_BUF64_CN:
case CMD_CLOSE_XRI_CN:
case CMD_ABORT_XRI_CN:
/* /*
* For IOCBs, like QUE_RING_BUF, that have no rsp ring * For IOCBs, like QUE_RING_BUF, that have no rsp ring
* completion, iocb_cmpl MUST be 0. * completion, iocb_cmpl MUST be 0.
...@@ -2561,6 +2559,16 @@ lpfc_sli_sum_iocb(struct lpfc_hba *phba, struct lpfc_sli_ring *pring, ...@@ -2561,6 +2559,16 @@ lpfc_sli_sum_iocb(struct lpfc_hba *phba, struct lpfc_sli_ring *pring,
return sum; return sum;
} }
void
lpfc_sli_abort_fcp_cmpl(struct lpfc_hba * phba, struct lpfc_iocbq * cmdiocb,
struct lpfc_iocbq * rspiocb)
{
spin_lock_irq(phba->host->host_lock);
list_add_tail(&cmdiocb->list, &phba->lpfc_iocb_list);
spin_unlock_irq(phba->host->host_lock);
return;
}
int int
lpfc_sli_abort_iocb(struct lpfc_hba *phba, struct lpfc_sli_ring *pring, lpfc_sli_abort_iocb(struct lpfc_hba *phba, struct lpfc_sli_ring *pring,
uint16_t tgt_id, uint64_t lun_id, uint32_t ctx, uint16_t tgt_id, uint64_t lun_id, uint32_t ctx,
...@@ -2610,6 +2618,8 @@ lpfc_sli_abort_iocb(struct lpfc_hba *phba, struct lpfc_sli_ring *pring, ...@@ -2610,6 +2618,8 @@ lpfc_sli_abort_iocb(struct lpfc_hba *phba, struct lpfc_sli_ring *pring,
else else
abtsiocb->iocb.ulpCommand = CMD_CLOSE_XRI_CN; abtsiocb->iocb.ulpCommand = CMD_CLOSE_XRI_CN;
/* Setup callback routine and issue the command. */
abtsiocb->iocb_cmpl = lpfc_sli_abort_fcp_cmpl;
ret_val = lpfc_sli_issue_iocb(phba, pring, abtsiocb, 0); ret_val = lpfc_sli_issue_iocb(phba, pring, abtsiocb, 0);
if (ret_val == IOCB_ERROR) { if (ret_val == IOCB_ERROR) {
list_add_tail(&abtsiocb->list, lpfc_iocb_list); list_add_tail(&abtsiocb->list, lpfc_iocb_list);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册