From d07e392f088e9d92b5a4cb2d20202be49d8d93df Mon Sep 17 00:00:00 2001 From: Shuhei Matsumoto Date: Wed, 4 Mar 2020 22:32:16 -0500 Subject: [PATCH] lib/vhost: Simplfy error paths in vhost_dev_register() The next patch will create a SPDK thread in vhost_dev_register() and exit the SPDK thread in vhost_dev_unregister(). As a preparation, simplify error paths in vhost_dev_register() by changing some gotos to return, moving free after the out label, and moving insertion after succeeding vhost_register_unix_socket(). Signed-off-by: Shuhei Matsumoto Change-Id: Id1a2a50b4ba5732f91598a326a08de5c652fd136 Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/1145 Tested-by: SPDK CI Jenkins Reviewed-by: Changpeng Liu Reviewed-by: Darek Stojaczyk Reviewed-by: Ben Walker --- lib/vhost/vhost.c | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/lib/vhost/vhost.c b/lib/vhost/vhost.c index 489fc9161..e09b46b15 100644 --- a/lib/vhost/vhost.c +++ b/lib/vhost/vhost.c @@ -607,28 +607,23 @@ vhost_dev_register(struct spdk_vhost_dev *vdev, const char *name, const char *ma if (vhost_parse_core_mask(mask_str, &cpumask) != 0) { SPDK_ERRLOG("cpumask %s is invalid (app mask is 0x%s)\n", mask_str, spdk_cpuset_fmt(spdk_app_get_core_mask())); - rc = -EINVAL; - goto out; + return -EINVAL; } if (spdk_vhost_dev_find(name)) { SPDK_ERRLOG("vhost controller %s already exists.\n", name); - rc = -EEXIST; - goto out; + return -EEXIST; } if (snprintf(path, sizeof(path), "%s%s", dev_dirname, name) >= (int)sizeof(path)) { SPDK_ERRLOG("Resulting socket path for controller %s is too long: %s%s\n", name, dev_dirname, name); - rc = -EINVAL; - goto out; + return -EINVAL; } vdev->name = strdup(name); vdev->path = strdup(path); if (vdev->name == NULL || vdev->path == NULL) { - free(vdev->name); - free(vdev->path); rc = -EIO; goto out; } @@ -637,24 +632,24 @@ vhost_dev_register(struct spdk_vhost_dev *vdev, const char *name, const char *ma vdev->registered = true; vdev->backend = backend; TAILQ_INIT(&vdev->vsessions); - TAILQ_INSERT_TAIL(&g_vhost_devices, vdev, tailq); vhost_dev_set_coalescing(vdev, SPDK_VHOST_COALESCING_DELAY_BASE_US, SPDK_VHOST_VQ_IOPS_COALESCING_THRESHOLD); if (vhost_register_unix_socket(path, name, vdev->virtio_features, vdev->disabled_features, vdev->protocol_features)) { - TAILQ_REMOVE(&g_vhost_devices, vdev, tailq); - free(vdev->name); - free(vdev->path); rc = -EIO; goto out; } + TAILQ_INSERT_TAIL(&g_vhost_devices, vdev, tailq); + SPDK_INFOLOG(SPDK_LOG_VHOST, "Controller %s: new controller added\n", vdev->name); return 0; out: + free(vdev->name); + free(vdev->path); return rc; }