mirror of https://gitee.com/openkylin/linux.git
[PATCH] lpfc 8.1.3: Fix polling mode panic
Fix polling mode panic Cause: Race between interrupt driven and polling path in harvesting iocbs from the response ring. Signed-off-by: Jamie Wellnitz <Jamie.Wellnitz@emulex.com> Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
This commit is contained in:
parent
66a9ed6600
commit
b808608bd7
|
@ -467,6 +467,11 @@ lpfc_scsi_cmd_iocb_cmpl(struct lpfc_hba *phba, struct lpfc_iocbq *pIocbIn,
|
|||
sdev = cmd->device;
|
||||
cmd->scsi_done(cmd);
|
||||
|
||||
if (phba->cfg_poll & ENABLE_FCP_RING_POLLING) {
|
||||
lpfc_release_scsi_buf(phba, lpfc_cmd);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!result && pnode != NULL &&
|
||||
((jiffies - pnode->last_ramp_up_time) >
|
||||
LPFC_Q_RAMP_UP_INTERVAL * HZ) &&
|
||||
|
|
|
@ -1154,12 +1154,17 @@ lpfc_sli_handle_fast_ring_event(struct lpfc_hba * phba,
|
|||
cmdiocbq = lpfc_sli_iocbq_lookup(phba, pring,
|
||||
&rspiocbq);
|
||||
if ((cmdiocbq) && (cmdiocbq->iocb_cmpl)) {
|
||||
spin_unlock_irqrestore(
|
||||
phba->host->host_lock, iflag);
|
||||
(cmdiocbq->iocb_cmpl)(phba, cmdiocbq,
|
||||
&rspiocbq);
|
||||
spin_lock_irqsave(phba->host->host_lock,
|
||||
iflag);
|
||||
if (phba->cfg_poll & ENABLE_FCP_RING_POLLING) {
|
||||
(cmdiocbq->iocb_cmpl)(phba, cmdiocbq,
|
||||
&rspiocbq);
|
||||
} else {
|
||||
spin_unlock_irqrestore(
|
||||
phba->host->host_lock, iflag);
|
||||
(cmdiocbq->iocb_cmpl)(phba, cmdiocbq,
|
||||
&rspiocbq);
|
||||
spin_lock_irqsave(phba->host->host_lock,
|
||||
iflag);
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
|
|
Loading…
Reference in New Issue