1
0

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:
Duane Grigsby
2017-08-23 15:04:58 -07:00
committed by Martin K. Petersen
parent e6373f33a6
commit cf19c45dba
6 changed files with 25 additions and 1 deletions

View File

@@ -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);
}