vhost_scsi: properly handle requests to unsupported lun

Fixes vhost crash on null lun target.
Added extra check in vhost IO path.

Change-Id: Ia6aa29cce41c2fc74e0a8eec545e6675858a28e3
Signed-off-by: Dariusz Stojaczyk <dariuszx.stojaczyk@intel.com>
Reviewed-on: https://review.gerrithub.io/365196
Tested-by: SPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: Daniel Verkamp <daniel.verkamp@intel.com>
Reviewed-by: Ben Walker <benjamin.walker@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
This commit is contained in:
Dariusz Stojaczyk 2017-06-13 18:35:30 +02:00 committed by Jim Harris
parent 6bd3e2a0a7
commit bc70a4d63f

View File

@ -391,10 +391,17 @@ process_request(struct spdk_vhost_task *task)
return -1;
}
task->scsi.lun = get_scsi_lun(task->scsi_dev, req->lun);
task->scsi.cdb = req->cdb;
task->scsi.target_port = spdk_scsi_dev_find_port_by_id(task->scsi_dev, 0);
SPDK_TRACEDUMP(SPDK_TRACE_VHOST_SCSI_DATA, "request CDB", req->cdb, VIRTIO_SCSI_CDB_SIZE);
task->scsi.lun = get_scsi_lun(task->scsi_dev, req->lun);
if (unlikely(task->scsi.lun == NULL)) {
spdk_scsi_task_process_null_lun(&task->scsi);
task->resp->response = VIRTIO_SCSI_S_OK;
return 1;
}
return 0;
}
@ -434,6 +441,10 @@ process_requestq(struct spdk_vhost_scsi_dev *svdev, struct rte_vhost_vring *vq)
task_submit(task);
SPDK_TRACELOG(SPDK_TRACE_VHOST_SCSI, "====== Task %p req_idx %d submitted ======\n", task,
task->req_idx);
} else if (result > 0) {
process_task_completion(task, NULL);
SPDK_TRACELOG(SPDK_TRACE_VHOST_SCSI, "====== Task %p req_idx %d finished early ======\n", task,
task->req_idx);
} else {
invalid_request(task);
SPDK_TRACELOG(SPDK_TRACE_VHOST_SCSI, "====== Task %p req_idx %d failed ======\n", task,