Commit 88f6b9a6 authored by Dariusz Stojaczyk's avatar Dariusz Stojaczyk Committed by Jim Harris
Browse files

vhost_scsi: fix scsi_task leak



The task was being aborted before
setting it's free_cb. This
results in i.e. not allowing
vhost device to stop it's pollers,
as it would endlessly wait for
this task to finish.

Change-Id: I0de2d1f21da109db1045e433c07f153316e09997
Signed-off-by: default avatarDariusz Stojaczyk <dariuszx.stojaczyk@intel.com>
Reviewed-on: https://review.gerrithub.io/381866


Reviewed-by: default avatarJim Harris <james.r.harris@intel.com>
Tested-by: default avatarSPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: default avatarDaniel Verkamp <daniel.verkamp@intel.com>
parent 29a33dab
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -406,6 +406,8 @@ task_data_setup(struct spdk_vhost_scsi_task *task,
	uint32_t desc_table_len, len = 0;
	int rc;

	spdk_scsi_task_construct(&task->scsi, spdk_vhost_scsi_task_cpl, spdk_vhost_scsi_task_free_cb, NULL);

	rc = spdk_vhost_vq_get_desc(vdev, task->vq, task->req_idx, &desc, &desc_table, &desc_table_len);
	/* First descriptor must be readable */
	if (rc != 0 || spdk_unlikely(spdk_vhost_vring_desc_is_wr(desc))) {
@@ -414,7 +416,6 @@ task_data_setup(struct spdk_vhost_scsi_task *task,
		goto abort_task;
	}

	spdk_scsi_task_construct(&task->scsi, spdk_vhost_scsi_task_cpl, spdk_vhost_scsi_task_free_cb, NULL);
	*req = spdk_vhost_gpa_to_vva(vdev, desc->addr);

	/* Each request must have at least 2 descriptors (e.g. request and response) */