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: Marcin Dziegielewski <marcin.dziegielewski@intel.com>
Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/470352
Reviewed-by: Tomasz Zawadzki <tomasz.zawadzki@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
Reviewed-by: Vitaliy Mysak <vitaliy.mysak@intel.com>
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
This commit is contained in:
Marcin Dziegielewski 2019-10-14 14:29:42 +02:00 committed by Jim Harris
parent 59a296465d
commit c74b4b32ba

View File

@ -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);
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;
}
if (ocf_mngt_cache_trylock(vbdev->ocf_cache)) {
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