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:
parent
6bd3e2a0a7
commit
bc70a4d63f
@ -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,
|
||||
|
Loading…
Reference in New Issue
Block a user