Commit c74b4b32 authored by Marcin Dziegielewski's avatar Marcin Dziegielewski Committed by Jim Harris
Browse files

lib/bdev/ocf: use asynhronous management API from OCF instead of polling



New version of OCF library provided full asynhronus management API,
therefore this patch changes all uses of polling in management
operations in vbdev to asynhronous way.

Change-Id: I7bf76fa2919fac4a068ef5c39f5b667b2be68ff7
Signed-off-by: default avatarMarcin Dziegielewski <marcin.dziegielewski@intel.com>
Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/470352


Reviewed-by: default avatarTomasz Zawadzki <tomasz.zawadzki@intel.com>
Reviewed-by: default avatarJim Harris <james.r.harris@intel.com>
Reviewed-by: default avatarVitaliy Mysak <vitaliy.mysak@intel.com>
Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
parent 59a29646
Loading
Loading
Loading
Loading
+47 −35
Original line number Diff line number Diff line
@@ -199,16 +199,17 @@ remove_core_cmpl(void *priv, int error)

/* Try to lock cache, then remove core */
static void
remove_core_poll(struct vbdev_ocf *vbdev)
remove_core_cache_lock_cmpl(ocf_cache_t cache, void *priv, int error)
{
	int rc;
	struct vbdev_ocf *vbdev = (struct vbdev_ocf *)priv;

	rc = ocf_mngt_cache_trylock(vbdev->ocf_cache);
	if (rc) {
	if (error) {
		SPDK_ERRLOG("Error %d, can not lock cache instance %s\n",
			    error, vbdev->name);
		vbdev_ocf_mngt_continue(vbdev, error);
		return;
	}

	vbdev_ocf_mngt_poll(vbdev, NULL);
	ocf_mngt_cache_remove_core(vbdev->ocf_core, remove_core_cmpl, vbdev);
}

@@ -217,7 +218,7 @@ static void
detach_core(struct vbdev_ocf *vbdev)
{
	if (vbdev->ocf_cache && ocf_cache_is_running(vbdev->ocf_cache)) {
		vbdev_ocf_mngt_poll(vbdev, remove_core_poll);
		ocf_mngt_cache_lock(vbdev->ocf_cache, remove_core_cache_lock_cmpl, vbdev);
	} else {
		vbdev_ocf_mngt_continue(vbdev, 0);
	}
@@ -258,7 +259,24 @@ stop_vbdev_cmpl(ocf_cache_t cache, void *priv, int error)

/* Try to lock cache, then stop it */
static void
stop_vbdev_poll(struct vbdev_ocf *vbdev)
stop_vbdev_cache_lock_cmpl(ocf_cache_t cache, void *priv, int error)
{
	struct vbdev_ocf *vbdev = (struct vbdev_ocf *)priv;

	if (error) {
		SPDK_ERRLOG("Error %d, can not lock cache instance %s\n",
			    error, vbdev->name);
		vbdev_ocf_mngt_continue(vbdev, error);
		return;
	}

	ocf_mngt_cache_stop(vbdev->ocf_cache, stop_vbdev_cmpl, vbdev);
}

/* Stop OCF cache object
 * vbdev_ocf is not operational after this */
static void
stop_vbdev(struct vbdev_ocf *vbdev)
{
	if (!ocf_cache_is_running(vbdev->ocf_cache)) {
		vbdev_ocf_mngt_continue(vbdev, 0);
@@ -273,20 +291,7 @@ stop_vbdev_poll(struct vbdev_ocf *vbdev)
		return;
	}

	if (ocf_mngt_cache_trylock(vbdev->ocf_cache)) {
		return;
	}

	vbdev_ocf_mngt_poll(vbdev, NULL);
	ocf_mngt_cache_stop(vbdev->ocf_cache, stop_vbdev_cmpl, vbdev);
}

/* Stop OCF cache object
 * vbdev_ocf is not operational after this */
static void
stop_vbdev(struct vbdev_ocf *vbdev)
{
	vbdev_ocf_mngt_poll(vbdev, stop_vbdev_poll);
	ocf_mngt_cache_lock(vbdev->ocf_cache, stop_vbdev_cache_lock_cmpl, vbdev);
}

static void
@@ -299,25 +304,29 @@ flush_vbdev_cmpl(ocf_cache_t cache, void *priv, int error)
}

static void
flush_vbdev_poll(struct vbdev_ocf *vbdev)
flush_vbdev_cache_lock_cmpl(ocf_cache_t cache, void *priv, int error)
{
	if (!ocf_cache_is_running(vbdev->ocf_cache)) {
		vbdev_ocf_mngt_continue(vbdev, -EINVAL);
		return;
	}
	struct vbdev_ocf *vbdev = (struct vbdev_ocf *)priv;

	if (ocf_mngt_cache_trylock(vbdev->ocf_cache)) {
	if (error) {
		SPDK_ERRLOG("Error %d, can not lock cache instance %s\n",
			    error, vbdev->name);
		vbdev_ocf_mngt_continue(vbdev, error);
		return;
	}

	vbdev_ocf_mngt_poll(vbdev, NULL);
	ocf_mngt_cache_flush(vbdev->ocf_cache, flush_vbdev_cmpl, vbdev);
}

static void
flush_vbdev(struct vbdev_ocf *vbdev)
{
	vbdev_ocf_mngt_poll(vbdev, flush_vbdev_poll);
	if (!ocf_cache_is_running(vbdev->ocf_cache)) {
		vbdev_ocf_mngt_continue(vbdev, -EINVAL);
		return;
	}

	ocf_mngt_cache_lock(vbdev->ocf_cache, flush_vbdev_cache_lock_cmpl, vbdev);
}

/* Procedures called during dirty unregister */
@@ -941,13 +950,16 @@ add_core_cmpl(ocf_cache_t cache, ocf_core_t core, void *priv, int error)

/* Try to lock cache, then add core */
static void
add_core_poll(struct vbdev_ocf *vbdev)
add_core_cache_lock_cmpl(ocf_cache_t cache, void *priv, int error)
{
	if (ocf_mngt_cache_trylock(vbdev->ocf_cache)) {
		return;
	}
	struct vbdev_ocf *vbdev = (struct vbdev_ocf *)priv;

	vbdev_ocf_mngt_poll(vbdev, NULL);
	if (error) {
		SPDK_ERRLOG("Error %d, can not lock cache instance %s,"
			    "starting rollback\n", error, vbdev->name);
		clear_starting_indicator_vbdev(vbdev);
		vbdev_ocf_mngt_stop(vbdev, unregister_path_dirty, error);
	}
	ocf_mngt_cache_add_core(vbdev->ocf_cache, &vbdev->cfg.core, add_core_cmpl, vbdev);
}

@@ -955,7 +967,7 @@ add_core_poll(struct vbdev_ocf *vbdev)
static void
add_core(struct vbdev_ocf *vbdev)
{
	vbdev_ocf_mngt_poll(vbdev, add_core_poll);
	ocf_mngt_cache_lock(vbdev->ocf_cache, add_core_cache_lock_cmpl, vbdev);
}

static void