Commit f99cce9c authored by Haoqian He's avatar Haoqian He Committed by Jim Harris
Browse files

vhost: Split vhost_user_dev_register into two functions



Split vhost_user_dev_register into two steps:
 1. vhost_user_dev_init only initializes user_dev.
 2. vhost_user_dev_start creates the socket and startup controller.

This patch is pre-patch for enhancing vhost-scsi live recovery.

Change-Id: I66d27595151c82e56ba03cea1abf8df273db75bc
Signed-off-by: default avatarHaoqian He <haoqian.he@smartx.com>
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/20594


Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Community-CI: Mellanox Build Bot
Reviewed-by: default avatarChangpeng Liu <changpeng.liu@intel.com>
Reviewed-by: default avatarJim Harris <jim.harris@samsung.com>
parent 9bec3f58
Loading
Loading
Loading
Loading
+35 −10
Original line number Diff line number Diff line
@@ -1788,8 +1788,8 @@ vhost_dev_thread_exit(void *arg1)
static bool g_vhost_user_started = false;

int
vhost_user_dev_register(struct spdk_vhost_dev *vdev, const char *name, struct spdk_cpuset *cpumask,
			const struct spdk_vhost_user_dev_backend *user_backend)
vhost_user_dev_init(struct spdk_vhost_dev *vdev, const char *name,
		    struct spdk_cpuset *cpumask, const struct spdk_vhost_user_dev_backend *user_backend)
{
	char path[PATH_MAX];
	struct spdk_vhost_user_dev *user_dev;
@@ -1829,16 +1829,41 @@ vhost_user_dev_register(struct spdk_vhost_dev *vdev, const char *name, struct sp
	vhost_user_dev_set_coalescing(user_dev, 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)) {
	return 0;
}

int
vhost_user_dev_start(struct spdk_vhost_dev *vdev)
{
	return vhost_register_unix_socket(vdev->path, vdev->name, vdev->virtio_features,
					  vdev->disabled_features,
					  vdev->protocol_features);
}

int
vhost_user_dev_create(struct spdk_vhost_dev *vdev, const char *name, struct spdk_cpuset *cpumask,
		      const struct spdk_vhost_user_dev_backend *user_backend, bool delay)
{
	int rc;
	struct spdk_vhost_user_dev *user_dev;

	rc = vhost_user_dev_init(vdev, name, cpumask, user_backend);
	if (rc != 0) {
		return rc;
	}

	if (delay == false) {
		rc = vhost_user_dev_start(vdev);
		if (rc != 0) {
			user_dev = to_user_dev(vdev);
			spdk_thread_send_msg(vdev->thread, vhost_dev_thread_exit, NULL);
			pthread_mutex_destroy(&user_dev->lock);
			free(user_dev);
			free(vdev->path);
		return -EIO;
		}
	}

	return 0;
	return rc;
}

int
+1 −1
Original line number Diff line number Diff line
@@ -144,7 +144,7 @@ vhost_dev_register(struct spdk_vhost_dev *vdev, const char *name, const char *ma

	vdev->backend = backend;
	if (vdev->backend->type == VHOST_BACKEND_SCSI) {
		rc = vhost_user_dev_register(vdev, name, &cpumask, user_backend);
		rc = vhost_user_dev_create(vdev, name, &cpumask, user_backend, false);
	} else {
		rc = virtio_blk_construct_ctrlr(vdev, name, &cpumask, params, user_backend);
	}
+1 −1
Original line number Diff line number Diff line
@@ -1786,7 +1786,7 @@ vhost_user_blk_create_ctrlr(struct spdk_vhost_dev *vdev, struct spdk_cpuset *cpu
		bvdev->readonly = req.readonly;
	}

	return vhost_user_dev_register(vdev, address, cpumask, custom_opts);
	return vhost_user_dev_create(vdev, address, cpumask, custom_opts, false);
}

static int
+6 −2
Original line number Diff line number Diff line
@@ -474,8 +474,12 @@ int vhost_user_session_set_coalescing(struct spdk_vhost_dev *dev,
				      struct spdk_vhost_session *vsession, void *ctx);
int vhost_user_dev_set_coalescing(struct spdk_vhost_user_dev *user_dev, uint32_t delay_base_us,
				  uint32_t iops_threshold);
int vhost_user_dev_register(struct spdk_vhost_dev *vdev, const char *name,
int vhost_user_dev_create(struct spdk_vhost_dev *vdev, const char *name,
			  struct spdk_cpuset *cpumask,
			  const struct spdk_vhost_user_dev_backend *user_backend, bool dealy);
int vhost_user_dev_init(struct spdk_vhost_dev *vdev, const char *name,
			struct spdk_cpuset *cpumask, const struct spdk_vhost_user_dev_backend *user_backend);
int vhost_user_dev_start(struct spdk_vhost_dev *vdev);
int vhost_user_dev_unregister(struct spdk_vhost_dev *vdev);
int vhost_user_init(void);
void vhost_user_fini(spdk_vhost_fini_cb vhost_cb);