[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;
|
sdev = cmd->device;
|
||||||
cmd->scsi_done(cmd);
|
cmd->scsi_done(cmd);
|
||||||
|
|
||||||
|
if (phba->cfg_poll & ENABLE_FCP_RING_POLLING) {
|
||||||
|
lpfc_release_scsi_buf(phba, lpfc_cmd);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (!result && pnode != NULL &&
|
if (!result && pnode != NULL &&
|
||||||
((jiffies - pnode->last_ramp_up_time) >
|
((jiffies - pnode->last_ramp_up_time) >
|
||||||
LPFC_Q_RAMP_UP_INTERVAL * HZ) &&
|
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,
|
cmdiocbq = lpfc_sli_iocbq_lookup(phba, pring,
|
||||||
&rspiocbq);
|
&rspiocbq);
|
||||||
if ((cmdiocbq) && (cmdiocbq->iocb_cmpl)) {
|
if ((cmdiocbq) && (cmdiocbq->iocb_cmpl)) {
|
||||||
spin_unlock_irqrestore(
|
if (phba->cfg_poll & ENABLE_FCP_RING_POLLING) {
|
||||||
phba->host->host_lock, iflag);
|
(cmdiocbq->iocb_cmpl)(phba, cmdiocbq,
|
||||||
(cmdiocbq->iocb_cmpl)(phba, cmdiocbq,
|
&rspiocbq);
|
||||||
&rspiocbq);
|
} else {
|
||||||
spin_lock_irqsave(phba->host->host_lock,
|
spin_unlock_irqrestore(
|
||||||
iflag);
|
phba->host->host_lock, iflag);
|
||||||
|
(cmdiocbq->iocb_cmpl)(phba, cmdiocbq,
|
||||||
|
&rspiocbq);
|
||||||
|
spin_lock_irqsave(phba->host->host_lock,
|
||||||
|
iflag);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user