|
@@ -1906,18 +1906,19 @@ static int bnx2i_queue_scsi_cmd_resp(struct iscsi_session *session,
|
|
spin_lock(&session->lock);
|
|
spin_lock(&session->lock);
|
|
task = iscsi_itt_to_task(bnx2i_conn->cls_conn->dd_data,
|
|
task = iscsi_itt_to_task(bnx2i_conn->cls_conn->dd_data,
|
|
cqe->itt & ISCSI_CMD_RESPONSE_INDEX);
|
|
cqe->itt & ISCSI_CMD_RESPONSE_INDEX);
|
|
- if (!task) {
|
|
|
|
|
|
+ if (!task || !task->sc) {
|
|
spin_unlock(&session->lock);
|
|
spin_unlock(&session->lock);
|
|
return -EINVAL;
|
|
return -EINVAL;
|
|
}
|
|
}
|
|
sc = task->sc;
|
|
sc = task->sc;
|
|
- spin_unlock(&session->lock);
|
|
|
|
|
|
|
|
if (!blk_rq_cpu_valid(sc->request))
|
|
if (!blk_rq_cpu_valid(sc->request))
|
|
cpu = smp_processor_id();
|
|
cpu = smp_processor_id();
|
|
else
|
|
else
|
|
cpu = sc->request->cpu;
|
|
cpu = sc->request->cpu;
|
|
|
|
|
|
|
|
+ spin_unlock(&session->lock);
|
|
|
|
+
|
|
p = &per_cpu(bnx2i_percpu, cpu);
|
|
p = &per_cpu(bnx2i_percpu, cpu);
|
|
spin_lock(&p->p_work_lock);
|
|
spin_lock(&p->p_work_lock);
|
|
if (unlikely(!p->iothread)) {
|
|
if (unlikely(!p->iothread)) {
|