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 */
|
/* Stop OCF cache and unregister SPDK bdev */
|
||||||
int
|
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;
|
int rc = 0;
|
||||||
|
|
||||||
if (vbdev->state.started) {
|
if (vbdev->state.started) {
|
||||||
spdk_bdev_unregister(&vbdev->exp_bdev, NULL, NULL);
|
spdk_bdev_unregister(&vbdev->exp_bdev, cb, cb_arg);
|
||||||
} else {
|
} else {
|
||||||
rc = vbdev_ocf_destruct(vbdev);
|
rc = vbdev_ocf_destruct(vbdev);
|
||||||
|
if (rc == 0 && cb) {
|
||||||
|
cb(cb_arg, 0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return rc;
|
return rc;
|
||||||
@ -917,7 +920,7 @@ hotremove_cb(void *ctx)
|
|||||||
|
|
||||||
SPDK_NOTICELOG("Deinitializing '%s' because its core device '%s' was removed\n",
|
SPDK_NOTICELOG("Deinitializing '%s' because its core device '%s' was removed\n",
|
||||||
base->parent->name, base->name);
|
base->parent->name, base->name);
|
||||||
vbdev_ocf_delete(base->parent);
|
vbdev_ocf_delete(base->parent, NULL, NULL);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -929,7 +932,7 @@ hotremove_cb(void *ctx)
|
|||||||
SPDK_NOTICELOG("Deinitializing '%s' because"
|
SPDK_NOTICELOG("Deinitializing '%s' because"
|
||||||
" its cache device '%s' was removed\n",
|
" its cache device '%s' was removed\n",
|
||||||
vbdev->name, base->name);
|
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);
|
struct vbdev_ocf_base *vbdev_ocf_get_base_by_name(const char *name);
|
||||||
|
|
||||||
/* Stop OCF cache and unregister SPDK bdev */
|
/* 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 *);
|
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},
|
{"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
|
static void
|
||||||
spdk_rpc_delete_ocf_bdev(struct spdk_jsonrpc_request *request,
|
spdk_rpc_delete_ocf_bdev(struct spdk_jsonrpc_request *request,
|
||||||
const struct spdk_json_val *params)
|
const struct spdk_json_val *params)
|
||||||
{
|
{
|
||||||
struct rpc_delete_ocf_bdev req = {NULL};
|
struct rpc_delete_ocf_bdev req = {NULL};
|
||||||
struct spdk_json_write_ctx *w;
|
|
||||||
struct vbdev_ocf *vbdev;
|
struct vbdev_ocf *vbdev;
|
||||||
int status;
|
int status;
|
||||||
|
|
||||||
@ -139,7 +157,7 @@ spdk_rpc_delete_ocf_bdev(struct spdk_jsonrpc_request *request,
|
|||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
||||||
status = vbdev_ocf_delete(vbdev);
|
status = vbdev_ocf_delete(vbdev, delete_cb, request);
|
||||||
if (status) {
|
if (status) {
|
||||||
spdk_jsonrpc_send_error_response_fmt(request, SPDK_JSONRPC_ERROR_INTERNAL_ERROR,
|
spdk_jsonrpc_send_error_response_fmt(request, SPDK_JSONRPC_ERROR_INTERNAL_ERROR,
|
||||||
"Could not delete OCF vbdev: %s",
|
"Could not delete OCF vbdev: %s",
|
||||||
@ -147,14 +165,6 @@ spdk_rpc_delete_ocf_bdev(struct spdk_jsonrpc_request *request,
|
|||||||
goto end;
|
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:
|
end:
|
||||||
free_rpc_delete_ocf_bdev(&req);
|
free_rpc_delete_ocf_bdev(&req);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user