forked from luck/tmp_suning_uos_patched
[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: James Smart <James.Smart@emulex.com> Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
This commit is contained in:
parent
1f679cafd2
commit
5eb95af086
@ -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,
|
||||
struct lpfc_iocbq * queue1,
|
||||
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_free(struct lpfc_hba *, void *, dma_addr_t);
|
||||
|
@ -874,6 +874,7 @@ __lpfc_abort_handler(struct scsi_cmnd *cmnd)
|
||||
else
|
||||
icmd->ulpCommand = CMD_CLOSE_XRI_CN;
|
||||
|
||||
abtsiocb->iocb_cmpl = lpfc_sli_abort_fcp_cmpl;
|
||||
if (lpfc_sli_issue_iocb(phba, pring, abtsiocb, 0) ==
|
||||
IOCB_ERROR) {
|
||||
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,
|
||||
switch (piocb->iocb.ulpCommand) {
|
||||
case CMD_QUE_RING_BUF_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
|
||||
* completion, iocb_cmpl MUST be 0.
|
||||
@ -2561,6 +2559,16 @@ lpfc_sli_sum_iocb(struct lpfc_hba *phba, struct lpfc_sli_ring *pring,
|
||||
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
|
||||
lpfc_sli_abort_iocb(struct lpfc_hba *phba, struct lpfc_sli_ring *pring,
|
||||
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,
|
||||
else
|
||||
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);
|
||||
if (ret_val == IOCB_ERROR) {
|
||||
list_add_tail(&abtsiocb->list, lpfc_iocb_list);
|
||||
|
Loading…
Reference in New Issue
Block a user