|
@@ -3829,9 +3829,9 @@ lpfc_scsi_cmd_iocb_cmpl(struct lpfc_hba *phba, struct lpfc_iocbq *pIocbIn,
|
|
|
cmd->scsi_done(cmd);
|
|
|
|
|
|
if (phba->cfg_poll & ENABLE_FCP_RING_POLLING) {
|
|
|
- spin_lock_irq(&phba->hbalock);
|
|
|
+ spin_lock_irqsave(&phba->hbalock, flags);
|
|
|
lpfc_cmd->pCmd = NULL;
|
|
|
- spin_unlock_irq(&phba->hbalock);
|
|
|
+ spin_unlock_irqrestore(&phba->hbalock, flags);
|
|
|
|
|
|
/*
|
|
|
* If there is a thread waiting for command completion
|
|
@@ -3871,9 +3871,9 @@ lpfc_scsi_cmd_iocb_cmpl(struct lpfc_hba *phba, struct lpfc_iocbq *pIocbIn,
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- spin_lock_irq(&phba->hbalock);
|
|
|
+ spin_lock_irqsave(&phba->hbalock, flags);
|
|
|
lpfc_cmd->pCmd = NULL;
|
|
|
- spin_unlock_irq(&phba->hbalock);
|
|
|
+ spin_unlock_irqrestore(&phba->hbalock, flags);
|
|
|
|
|
|
/*
|
|
|
* If there is a thread waiting for command completion
|
|
@@ -4398,16 +4398,17 @@ lpfc_abort_handler(struct scsi_cmnd *cmnd)
|
|
|
struct lpfc_scsi_buf *lpfc_cmd;
|
|
|
IOCB_t *cmd, *icmd;
|
|
|
int ret = SUCCESS, status = 0;
|
|
|
+ unsigned long flags;
|
|
|
DECLARE_WAIT_QUEUE_HEAD_ONSTACK(waitq);
|
|
|
|
|
|
status = fc_block_scsi_eh(cmnd);
|
|
|
if (status != 0 && status != SUCCESS)
|
|
|
return status;
|
|
|
|
|
|
- spin_lock_irq(&phba->hbalock);
|
|
|
+ spin_lock_irqsave(&phba->hbalock, flags);
|
|
|
/* driver queued commands are in process of being flushed */
|
|
|
if (phba->hba_flag & HBA_FCP_IOQ_FLUSH) {
|
|
|
- spin_unlock_irq(&phba->hbalock);
|
|
|
+ spin_unlock_irqrestore(&phba->hbalock, flags);
|
|
|
lpfc_printf_vlog(vport, KERN_WARNING, LOG_FCP,
|
|
|
"3168 SCSI Layer abort requested I/O has been "
|
|
|
"flushed by LLD.\n");
|
|
@@ -4416,7 +4417,7 @@ lpfc_abort_handler(struct scsi_cmnd *cmnd)
|
|
|
|
|
|
lpfc_cmd = (struct lpfc_scsi_buf *)cmnd->host_scribble;
|
|
|
if (!lpfc_cmd || !lpfc_cmd->pCmd) {
|
|
|
- spin_unlock_irq(&phba->hbalock);
|
|
|
+ spin_unlock_irqrestore(&phba->hbalock, flags);
|
|
|
lpfc_printf_vlog(vport, KERN_WARNING, LOG_FCP,
|
|
|
"2873 SCSI Layer I/O Abort Request IO CMPL Status "
|
|
|
"x%x ID %d LUN %d\n",
|
|
@@ -4427,7 +4428,7 @@ lpfc_abort_handler(struct scsi_cmnd *cmnd)
|
|
|
iocb = &lpfc_cmd->cur_iocbq;
|
|
|
/* the command is in process of being cancelled */
|
|
|
if (!(iocb->iocb_flag & LPFC_IO_ON_TXCMPLQ)) {
|
|
|
- spin_unlock_irq(&phba->hbalock);
|
|
|
+ spin_unlock_irqrestore(&phba->hbalock, flags);
|
|
|
lpfc_printf_vlog(vport, KERN_WARNING, LOG_FCP,
|
|
|
"3169 SCSI Layer abort requested I/O has been "
|
|
|
"cancelled by LLD.\n");
|
|
@@ -4484,7 +4485,7 @@ lpfc_abort_handler(struct scsi_cmnd *cmnd)
|
|
|
abtsiocb->iocb_cmpl = lpfc_sli_abort_fcp_cmpl;
|
|
|
abtsiocb->vport = vport;
|
|
|
/* no longer need the lock after this point */
|
|
|
- spin_unlock_irq(&phba->hbalock);
|
|
|
+ spin_unlock_irqrestore(&phba->hbalock, flags);
|
|
|
|
|
|
if (lpfc_sli_issue_iocb(phba, LPFC_FCP_RING, abtsiocb, 0) ==
|
|
|
IOCB_ERROR) {
|
|
@@ -4516,7 +4517,7 @@ lpfc_abort_handler(struct scsi_cmnd *cmnd)
|
|
|
goto out;
|
|
|
|
|
|
out_unlock:
|
|
|
- spin_unlock_irq(&phba->hbalock);
|
|
|
+ spin_unlock_irqrestore(&phba->hbalock, flags);
|
|
|
out:
|
|
|
lpfc_printf_vlog(vport, KERN_WARNING, LOG_FCP,
|
|
|
"0749 SCSI Layer I/O Abort Request Status x%x ID %d "
|