ocf: make vbdev_ocf_delete function asynchronous
vbdev_ocf_delete function accepts callback now. RPC delete_ocf_bdev is also updated to adopt this change. Change-Id: I1d357a5e37015268e28c07fd81dc35f48ec80ab8 Signed-off-by: Vitaliy Mysak <vitaliy.mysak@intel.com> Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/449777 Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by: Piotr Pelpliński <piotr.pelplinski@intel.com> Reviewed-by: Jim Harris <james.r.harris@intel.com> Reviewed-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
This commit is contained in:
parent
fee323b2ab
commit
9977424df1
@ -232,14 +232,17 @@ vbdev_ocf_destruct(void *opaque)
|
||||
|
||||
/* Stop OCF cache and unregister SPDK bdev */
|
||||
int
|
||||
vbdev_ocf_delete(struct vbdev_ocf *vbdev)
|
||||
vbdev_ocf_delete(struct vbdev_ocf *vbdev, void (*cb)(void *, int), void *cb_arg)
|
||||
{
|
||||
int rc = 0;
|
||||
|
||||
if (vbdev->state.started) {
|
||||
spdk_bdev_unregister(&vbdev->exp_bdev, NULL, NULL);
|
||||
spdk_bdev_unregister(&vbdev->exp_bdev, cb, cb_arg);
|
||||
} else {
|
||||
rc = vbdev_ocf_destruct(vbdev);
|
||||
if (rc == 0 && cb) {
|
||||
cb(cb_arg, 0);
|
||||
}
|
||||
}
|
||||
|
||||
return rc;
|
||||
@ -917,7 +920,7 @@ hotremove_cb(void *ctx)
|
||||
|
||||
SPDK_NOTICELOG("Deinitializing '%s' because its core device '%s' was removed\n",
|
||||
base->parent->name, base->name);
|
||||
vbdev_ocf_delete(base->parent);
|
||||
vbdev_ocf_delete(base->parent, NULL, NULL);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -929,7 +932,7 @@ hotremove_cb(void *ctx)
|
||||
SPDK_NOTICELOG("Deinitializing '%s' because"
|
||||
" its cache device '%s' was removed\n",
|
||||
vbdev->name, base->name);
|
||||
vbdev_ocf_delete(vbdev);
|
||||
vbdev_ocf_delete(vbdev, NULL, NULL);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -145,7 +145,7 @@ struct vbdev_ocf *vbdev_ocf_get_by_name(const char *name);
|
||||
struct vbdev_ocf_base *vbdev_ocf_get_base_by_name(const char *name);
|
||||
|
||||
/* Stop OCF cache and unregister SPDK bdev */
|
||||
int vbdev_ocf_delete(struct vbdev_ocf *vbdev);
|
||||
int vbdev_ocf_delete(struct vbdev_ocf *vbdev, void (*cb)(void *, int), void *cb_arg);
|
||||
|
||||
typedef void (*vbdev_ocf_foreach_fn)(struct vbdev_ocf *, void *);
|
||||
|
||||
|
@ -114,12 +114,30 @@ static const struct spdk_json_object_decoder rpc_delete_ocf_bdev_decoders[] = {
|
||||
{"name", offsetof(struct rpc_delete_ocf_bdev, name), spdk_json_decode_string},
|
||||
};
|
||||
|
||||
static void
|
||||
delete_cb(void *cb_arg, int status)
|
||||
{
|
||||
struct spdk_jsonrpc_request *request = cb_arg;
|
||||
struct spdk_json_write_ctx *w;
|
||||
|
||||
if (status) {
|
||||
spdk_jsonrpc_send_error_response_fmt(request, SPDK_JSONRPC_ERROR_INTERNAL_ERROR,
|
||||
"Could not delete OCF vbdev: %d",
|
||||
status);
|
||||
} else {
|
||||
w = spdk_jsonrpc_begin_result(request);
|
||||
if (w) {
|
||||
spdk_json_write_bool(w, true);
|
||||
spdk_jsonrpc_end_result(request, w);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
spdk_rpc_delete_ocf_bdev(struct spdk_jsonrpc_request *request,
|
||||
const struct spdk_json_val *params)
|
||||
{
|
||||
struct rpc_delete_ocf_bdev req = {NULL};
|
||||
struct spdk_json_write_ctx *w;
|
||||
struct vbdev_ocf *vbdev;
|
||||
int status;
|
||||
|
||||
@ -139,7 +157,7 @@ spdk_rpc_delete_ocf_bdev(struct spdk_jsonrpc_request *request,
|
||||
goto end;
|
||||
}
|
||||
|
||||
status = vbdev_ocf_delete(vbdev);
|
||||
status = vbdev_ocf_delete(vbdev, delete_cb, request);
|
||||
if (status) {
|
||||
spdk_jsonrpc_send_error_response_fmt(request, SPDK_JSONRPC_ERROR_INTERNAL_ERROR,
|
||||
"Could not delete OCF vbdev: %s",
|
||||
@ -147,14 +165,6 @@ spdk_rpc_delete_ocf_bdev(struct spdk_jsonrpc_request *request,
|
||||
goto end;
|
||||
}
|
||||
|
||||
w = spdk_jsonrpc_begin_result(request);
|
||||
if (w == NULL) {
|
||||
goto end;
|
||||
}
|
||||
|
||||
spdk_json_write_bool(w, true);
|
||||
spdk_jsonrpc_end_result(request, w);
|
||||
|
||||
end:
|
||||
free_rpc_delete_ocf_bdev(&req);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user