From bbbe9e1ce6dd9081a2c12a62b0735c2f384c67a7 Mon Sep 17 00:00:00 2001 From: Vitaliy Mysak Date: Wed, 8 May 2019 09:49:17 +0200 Subject: [PATCH] ocf: add vbdev_ocf_mngt_stop() function Add stop function to management interface. It is needed for error handling when execution has to be aborted early. Example flow: ``` rc = op(); if (rc) { handle(); vbdev_ocf_mngt_stop(); } else { vbdev_ocf_mngt_continue(); } ``` This can be improved in the future, because currently, error handling cannot be a management operation on its own (but should be). Signed-off-by: Vitaliy Mysak Change-Id: I9ba528db8a9957ee561e5c1b5528b16bd143d5d8 Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/453654 Tested-by: SPDK CI Jenkins Reviewed-by: Jim Harris Reviewed-by: Darek Stojaczyk --- lib/bdev/ocf/utils.c | 18 +++++++++++++----- lib/bdev/ocf/utils.h | 3 +++ 2 files changed, 16 insertions(+), 5 deletions(-) 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