diff --git a/lib/bdev/ocf/utils.c b/lib/bdev/ocf/utils.c index 48f36658f..4b56cb38b 100644 --- a/lib/bdev/ocf/utils.c +++ b/lib/bdev/ocf/utils.c @@ -111,6 +111,18 @@ vbdev_ocf_mngt_poll(struct vbdev_ocf *vbdev, vbdev_ocf_mngt_fn fn) vbdev->mngt_ctx.poller_fn = fn; } +void +vbdev_ocf_mngt_stop(struct vbdev_ocf *vbdev) +{ + spdk_poller_unregister(&vbdev->mngt_ctx.poller); + + if (vbdev->mngt_ctx.cb) { + vbdev->mngt_ctx.cb(vbdev->mngt_ctx.status, vbdev, vbdev->mngt_ctx.cb_arg); + } + + memset(&vbdev->mngt_ctx, 0, sizeof(vbdev->mngt_ctx)); +} + void vbdev_ocf_mngt_continue(struct vbdev_ocf *vbdev, int status) { @@ -129,9 +141,5 @@ vbdev_ocf_mngt_continue(struct vbdev_ocf *vbdev, int status) return; } - spdk_poller_unregister(&vbdev->mngt_ctx.poller); - if (vbdev->mngt_ctx.cb) { - vbdev->mngt_ctx.cb(vbdev->mngt_ctx.status, vbdev, vbdev->mngt_ctx.cb_arg); - } - memset(&vbdev->mngt_ctx, 0, sizeof(vbdev->mngt_ctx)); + vbdev_ocf_mngt_stop(vbdev); } diff --git a/lib/bdev/ocf/utils.h b/lib/bdev/ocf/utils.h index 22439c9aa..49ea8fe7e 100644 --- a/lib/bdev/ocf/utils.h +++ b/lib/bdev/ocf/utils.h @@ -56,4 +56,7 @@ void vbdev_ocf_mngt_poll(struct vbdev_ocf *vbdev, vbdev_ocf_mngt_fn fn); * If next function is NULL, finish management operation and invoke callback */ void vbdev_ocf_mngt_continue(struct vbdev_ocf *vbdev, int status); +/* Stop the execution and invoke callback with last status returned */ +void vbdev_ocf_mngt_stop(struct vbdev_ocf *vbdev); + #endif