scsi: qla2xxx: Add command completion for error path
The driver held spinlocks during callbacks for NVME errors which resulted in a deadlock because recovery LS cmds needed the same lock. Signed-off-by: Duane Grigsby <duane.grigsby@cavium.com> Signed-off-by: Himanshu Madhani <himanshu.madhani@cavium.com> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
committed by
Martin K. Petersen
parent
e6373f33a6
commit
cf19c45dba
@@ -154,6 +154,16 @@ static void qla_nvme_sp_ls_done(void *ptr, int res)
|
||||
qla2x00_rel_sp(sp);
|
||||
}
|
||||
|
||||
void qla_nvme_cmpl_io(struct srb_iocb *nvme)
|
||||
{
|
||||
srb_t *sp;
|
||||
struct nvmefc_fcp_req *fd = nvme->u.nvme.desc;
|
||||
|
||||
sp = container_of(nvme, srb_t, u.iocb_cmd);
|
||||
fd->done(fd);
|
||||
qla2xxx_rel_qpair_sp(sp->qpair, sp);
|
||||
}
|
||||
|
||||
static void qla_nvme_sp_done(void *ptr, int res)
|
||||
{
|
||||
srb_t *sp = ptr;
|
||||
@@ -175,7 +185,8 @@ static void qla_nvme_sp_done(void *ptr, int res)
|
||||
fd->status = 0;
|
||||
|
||||
fd->rcv_rsplen = nvme->u.nvme.rsp_pyld_len;
|
||||
fd->done(fd);
|
||||
list_add_tail(&nvme->u.nvme.entry, &sp->qpair->nvme_done_list);
|
||||
return;
|
||||
rel:
|
||||
qla2xxx_rel_qpair_sp(sp->qpair, sp);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user