diff --git a/lib/vhost/rte_vhost_user.c b/lib/vhost/rte_vhost_user.c index d817c1872..654902369 100644 --- a/lib/vhost/rte_vhost_user.c +++ b/lib/vhost/rte_vhost_user.c @@ -920,13 +920,22 @@ new_connection(int vid) } static int -vhost_user_session_start(struct spdk_vhost_dev *vdev, struct spdk_vhost_session *vsession) +vhost_user_session_start_cb(struct spdk_vhost_dev *vdev, + struct spdk_vhost_session *vsession, void *unused) { const struct spdk_vhost_user_dev_backend *backend; + int rc; backend = to_user_dev(vdev)->user_backend; + rc = backend->start_session(vdev, vsession, NULL); + vhost_user_session_start_done(vsession, rc); + return rc; +} - return vhost_user_session_send_event(vsession, backend->start_session, 3, "start session"); +static int +vhost_user_session_start(struct spdk_vhost_dev *vdev, struct spdk_vhost_session *vsession) +{ + return vhost_user_session_send_event(vsession, vhost_user_session_start_cb, 3, "start session"); } static int diff --git a/lib/vhost/vhost_blk.c b/lib/vhost/vhost_blk.c index 7afe3fccf..2f63f49ec 100644 --- a/lib/vhost/vhost_blk.c +++ b/lib/vhost/vhost_blk.c @@ -1309,15 +1309,14 @@ vhost_blk_start(struct spdk_vhost_dev *vdev, */ if (vsession->virtqueue[i].vring.desc == NULL) { SPDK_ERRLOG("%s: queue %"PRIu32" is empty\n", vsession->name, i); - rc = -1; - goto out; + return -1; } } rc = alloc_task_pool(bvsession); if (rc != 0) { SPDK_ERRLOG("%s: failed to alloc task pool.\n", vsession->name); - goto out; + return rc; } if (bvdev->bdev) { @@ -1325,8 +1324,7 @@ vhost_blk_start(struct spdk_vhost_dev *vdev, if (!bvsession->io_channel) { free_task_pool(bvsession); SPDK_ERRLOG("%s: I/O channel allocation failed\n", vsession->name); - rc = -1; - goto out; + return -1; } } @@ -1343,7 +1341,7 @@ vhost_blk_start(struct spdk_vhost_dev *vdev, if (rc) { SPDK_ERRLOG("%s: Interrupt register failed\n", vsession->name); - goto out; + return rc; } } @@ -1358,8 +1356,6 @@ vhost_blk_start(struct spdk_vhost_dev *vdev, spdk_poller_register_interrupt(bvsession->requestq_poller, vhost_blk_poller_set_interrupt_mode, bvsession); -out: - vhost_user_session_start_done(vsession, rc); return rc; } diff --git a/lib/vhost/vhost_scsi.c b/lib/vhost/vhost_scsi.c index 4714a1175..4fa8df7a0 100644 --- a/lib/vhost/vhost_scsi.c +++ b/lib/vhost/vhost_scsi.c @@ -1369,15 +1369,14 @@ vhost_scsi_start(struct spdk_vhost_dev *vdev, for (i = VIRTIO_SCSI_REQUESTQ; i < vsession->max_queues; i++) { if (vsession->virtqueue[i].vring.desc == NULL) { SPDK_ERRLOG("%s: queue %"PRIu32" is empty\n", vsession->name, i); - rc = -1; - goto out; + return -1; } } rc = alloc_task_pool(svsession); if (rc != 0) { SPDK_ERRLOG("%s: failed to alloc task pool.\n", vsession->name); - goto out; + return rc; } for (i = 0; i < SPDK_VHOST_SCSI_CTRLR_MAX_DEVS; i++) { @@ -1408,8 +1407,6 @@ vhost_scsi_start(struct spdk_vhost_dev *vdev, svsession->requestq_poller = SPDK_POLLER_REGISTER(vdev_worker, svsession, 0); svsession->mgmt_poller = SPDK_POLLER_REGISTER(vdev_mgmt_worker, svsession, MGMT_POLL_PERIOD_US); -out: - vhost_user_session_start_done(vsession, rc); return rc; }