diff --git a/lib/vhost/vhost_scsi.c b/lib/vhost/vhost_scsi.c index 7b31a82a3..7d8e1b411 100644 --- a/lib/vhost/vhost_scsi.c +++ b/lib/vhost/vhost_scsi.c @@ -132,9 +132,9 @@ spdk_vhost_task_free_cb(struct spdk_scsi_task *scsi_task) static void spdk_vhost_get_tasks(struct spdk_vhost_scsi_dev *svdev, struct spdk_vhost_task **tasks, - size_t count, spdk_scsi_task_cpl cpl_fn) + size_t count) { - size_t res_count, i; + size_t res_count; res_count = spdk_ring_dequeue(g_task_pool, (void **)tasks, count); if (res_count != count) { @@ -145,10 +145,6 @@ spdk_vhost_get_tasks(struct spdk_vhost_scsi_dev *svdev, struct spdk_vhost_task * assert(svdev->vdev.task_cnt <= INT_MAX - (int) res_count); svdev->vdev.task_cnt += res_count; - for (i = 0; i < res_count; ++i) { - memset(tasks[i], 0, sizeof(*tasks[i])); - spdk_scsi_task_construct(&tasks[i]->scsi, cpl_fn, spdk_vhost_task_free_cb, NULL); - } } static void @@ -331,6 +327,7 @@ process_ctrl_request(struct spdk_vhost_task *task) struct virtio_scsi_ctrl_tmf_req *ctrl_req; struct virtio_scsi_ctrl_an_resp *an_resp; + spdk_scsi_task_construct(&task->scsi, spdk_vhost_task_mgmt_cpl, spdk_vhost_task_free_cb, NULL); desc = spdk_vhost_vq_get_desc(task->vq, task->req_idx); ctrl_req = spdk_vhost_gpa_to_vva(&task->svdev->vdev, desc->addr); @@ -412,6 +409,7 @@ task_data_setup(struct spdk_vhost_task *task, goto abort_task; } + spdk_scsi_task_construct(&task->scsi, spdk_vhost_task_cpl, spdk_vhost_task_free_cb, NULL); *req = spdk_vhost_gpa_to_vva(vdev, desc->addr); desc = spdk_vhost_vring_desc_get_next(vq->desc, desc); @@ -540,9 +538,10 @@ process_controlq(struct spdk_vhost_scsi_dev *svdev, struct rte_vhost_vring *vq) uint16_t reqs_cnt, i; reqs_cnt = spdk_vhost_vq_avail_ring_get(vq, reqs, RTE_DIM(reqs)); - spdk_vhost_get_tasks(svdev, tasks, reqs_cnt, spdk_vhost_task_mgmt_cpl); + spdk_vhost_get_tasks(svdev, tasks, reqs_cnt); for (i = 0; i < reqs_cnt; i++) { task = tasks[i]; + memset(task, 0, sizeof(*task)); task->vq = vq; task->svdev = svdev; task->req_idx = reqs[i]; @@ -563,13 +562,14 @@ process_requestq(struct spdk_vhost_scsi_dev *svdev, struct rte_vhost_vring *vq) reqs_cnt = spdk_vhost_vq_avail_ring_get(vq, reqs, RTE_DIM(reqs)); assert(reqs_cnt <= 32); - spdk_vhost_get_tasks(svdev, tasks, reqs_cnt, spdk_vhost_task_cpl); + spdk_vhost_get_tasks(svdev, tasks, reqs_cnt); for (i = 0; i < reqs_cnt; i++) { SPDK_TRACELOG(SPDK_TRACE_VHOST_SCSI, "====== Starting processing request idx %"PRIu16"======\n", reqs[i]); task = tasks[i]; + memset(task, 0, sizeof(*task)); task->vq = vq; task->svdev = svdev; task->req_idx = reqs[i];