|
@@ -4158,9 +4158,17 @@ lpfc_scsi_cmd_iocb_cmpl(struct lpfc_hba *phba, struct lpfc_iocbq *pIocbIn,
|
|
|
}
|
|
|
lpfc_scsi_unprep_dma_buf(phba, lpfc_cmd);
|
|
|
|
|
|
- spin_lock_irqsave(&phba->hbalock, flags);
|
|
|
- lpfc_cmd->pCmd = NULL;
|
|
|
- spin_unlock_irqrestore(&phba->hbalock, flags);
|
|
|
+ /* If pCmd was set to NULL from abort path, do not call scsi_done */
|
|
|
+ if (xchg(&lpfc_cmd->pCmd, NULL) == NULL) {
|
|
|
+ lpfc_printf_vlog(vport, KERN_INFO, LOG_FCP,
|
|
|
+ "0711 FCP cmd already NULL, sid: 0x%06x, "
|
|
|
+ "did: 0x%06x, oxid: 0x%04x\n",
|
|
|
+ vport->fc_myDID,
|
|
|
+ (pnode) ? pnode->nlp_DID : 0,
|
|
|
+ phba->sli_rev == LPFC_SLI_REV4 ?
|
|
|
+ lpfc_cmd->cur_iocbq.sli4_xritag : 0xffff);
|
|
|
+ return;
|
|
|
+ }
|
|
|
|
|
|
/* The sdev is not guaranteed to be valid post scsi_done upcall. */
|
|
|
cmd->scsi_done(cmd);
|