diff --git a/lib/vhost/vhost.c b/lib/vhost/vhost.c index ef8feb63a..90be2eefb 100644 --- a/lib/vhost/vhost.c +++ b/lib/vhost/vhost.c @@ -506,6 +506,12 @@ spdk_vhost_dev_unload(struct spdk_vhost_dev *vdev) spdk_vhost_free_reactor(vdev->lcore); vdev->lcore = -1; + if (vdev->task_cnt > 0) { + SPDK_ERRLOG("%s: Leaked %u tasks when shutting down\n", vdev->name, vdev->task_cnt); + } + vdev->task_cnt = 0; + vdev->vid = -1; + vdev->num_queues = 0; } struct spdk_vhost_dev * diff --git a/lib/vhost/vhost_scsi.c b/lib/vhost/vhost_scsi.c index 74af6746d..d0185b83d 100644 --- a/lib/vhost/vhost_scsi.c +++ b/lib/vhost/vhost_scsi.c @@ -826,7 +826,6 @@ destroy_device(int vid) struct spdk_vhost_scsi_dev *svdev; struct spdk_vhost_dev *vdev; struct spdk_vhost_timed_event event = {0}; - uint32_t i; vdev = spdk_vhost_dev_find_by_vid(vid); if (vdev == NULL) { @@ -843,16 +842,6 @@ destroy_device(int vid) spdk_poller_unregister(&svdev->controlq_poller, event.spdk_event); spdk_vhost_timed_event_wait(&event, "unregister controll queue poller"); - /* Wait for all tasks to finish */ - for (i = 1000; i && vdev->task_cnt > 0; i--) { - usleep(1000); - } - - if (vdev->task_cnt > 0) { - rte_panic("%s: pending tasks did not finish in 1s.\n", vdev->name); - } - - spdk_vhost_timed_event_send(vdev->lcore, remove_vdev_cb, svdev, 1, "remove scsi vdev"); spdk_vhost_dev_unload(vdev);