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:
parent
59a296465d
commit
c74b4b32ba
@ -199,16 +199,17 @@ remove_core_cmpl(void *priv, int error)
|
|||||||
|
|
||||||
/* Try to lock cache, then remove core */
|
/* Try to lock cache, then remove core */
|
||||||
static void
|
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 (error) {
|
||||||
if (rc) {
|
SPDK_ERRLOG("Error %d, can not lock cache instance %s\n",
|
||||||
|
error, vbdev->name);
|
||||||
|
vbdev_ocf_mngt_continue(vbdev, error);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
vbdev_ocf_mngt_poll(vbdev, NULL);
|
|
||||||
ocf_mngt_cache_remove_core(vbdev->ocf_core, remove_core_cmpl, vbdev);
|
ocf_mngt_cache_remove_core(vbdev->ocf_core, remove_core_cmpl, vbdev);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -217,7 +218,7 @@ static void
|
|||||||
detach_core(struct vbdev_ocf *vbdev)
|
detach_core(struct vbdev_ocf *vbdev)
|
||||||
{
|
{
|
||||||
if (vbdev->ocf_cache && ocf_cache_is_running(vbdev->ocf_cache)) {
|
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 {
|
} else {
|
||||||
vbdev_ocf_mngt_continue(vbdev, 0);
|
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 */
|
/* Try to lock cache, then stop it */
|
||||||
static void
|
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)) {
|
if (!ocf_cache_is_running(vbdev->ocf_cache)) {
|
||||||
vbdev_ocf_mngt_continue(vbdev, 0);
|
vbdev_ocf_mngt_continue(vbdev, 0);
|
||||||
@ -273,20 +291,7 @@ stop_vbdev_poll(struct vbdev_ocf *vbdev)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ocf_mngt_cache_trylock(vbdev->ocf_cache)) {
|
ocf_mngt_cache_lock(vbdev->ocf_cache, stop_vbdev_cache_lock_cmpl, vbdev);
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -299,25 +304,29 @@ flush_vbdev_cmpl(ocf_cache_t cache, void *priv, int error)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
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)) {
|
struct vbdev_ocf *vbdev = (struct vbdev_ocf *)priv;
|
||||||
vbdev_ocf_mngt_continue(vbdev, -EINVAL);
|
|
||||||
|
if (error) {
|
||||||
|
SPDK_ERRLOG("Error %d, can not lock cache instance %s\n",
|
||||||
|
error, vbdev->name);
|
||||||
|
vbdev_ocf_mngt_continue(vbdev, error);
|
||||||
return;
|
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);
|
ocf_mngt_cache_flush(vbdev->ocf_cache, flush_vbdev_cmpl, vbdev);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
flush_vbdev(struct vbdev_ocf *vbdev)
|
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 */
|
/* 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 */
|
/* Try to lock cache, then add core */
|
||||||
static void
|
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)) {
|
struct vbdev_ocf *vbdev = (struct vbdev_ocf *)priv;
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
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);
|
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
|
static void
|
||||||
add_core(struct vbdev_ocf *vbdev)
|
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
|
static void
|
||||||
|
Loading…
Reference in New Issue
Block a user