ocf: add callback argument to vbdev_ocf_construct()
Add callback for construct function. It is not asynchronous yet, but will be after adopting asynchronous OCF API Also adopt RPC construct call for this change. This is done in this patch because (1) change is small (2) leaving implementation as TODO still requires implementing a mock because we decided that callback should be required rather than optional. Signed-off-by: Vitaliy Mysak <vitaliy.mysak@intel.com> Change-Id: Ib6a78e2caf34ac057d4da53ad5dda47163e8a089 Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/452146 (master) Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by: Tomasz Zawadzki <tomasz.zawadzki@intel.com> Reviewed-by: Darek Stojaczyk <dariusz.stojaczyk@intel.com> Reviewed-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com> Signed-off-by: Tomasz Zawadzki <tomasz.zawadzki@intel.com> Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/457187 Reviewed-by: Ben Walker <benjamin.walker@intel.com>
This commit is contained in:
parent
5ba7fb92c6
commit
cf0daf7f3b
@ -1069,11 +1069,13 @@ create_from_bdevs(struct vbdev_ocf *vbdev,
|
||||
}
|
||||
|
||||
/* Init and then start vbdev if all base devices are present */
|
||||
int
|
||||
void
|
||||
vbdev_ocf_construct(const char *vbdev_name,
|
||||
const char *cache_mode_name,
|
||||
const char *cache_name,
|
||||
const char *core_name)
|
||||
const char *core_name,
|
||||
void (*cb)(int, struct vbdev_ocf *, void *),
|
||||
void *cb_arg)
|
||||
{
|
||||
int rc;
|
||||
struct spdk_bdev *cache_bdev = spdk_bdev_get_by_name(cache_name);
|
||||
@ -1082,12 +1084,14 @@ vbdev_ocf_construct(const char *vbdev_name,
|
||||
|
||||
rc = init_vbdev(vbdev_name, cache_mode_name, cache_name, core_name);
|
||||
if (rc) {
|
||||
return rc;
|
||||
cb(rc, NULL, cb_arg);
|
||||
return;
|
||||
}
|
||||
|
||||
vbdev = vbdev_ocf_get_by_name(vbdev_name);
|
||||
if (vbdev == NULL) {
|
||||
return -ENODEV;
|
||||
cb(-ENODEV, NULL, cb_arg);
|
||||
return;
|
||||
}
|
||||
|
||||
if (cache_bdev == NULL) {
|
||||
@ -1099,7 +1103,8 @@ vbdev_ocf_construct(const char *vbdev_name,
|
||||
vbdev->name, core_name);
|
||||
}
|
||||
|
||||
return create_from_bdevs(vbdev, cache_bdev, core_bdev);
|
||||
rc = create_from_bdevs(vbdev, cache_bdev, core_bdev);
|
||||
cb(rc, vbdev, cb_arg);
|
||||
}
|
||||
|
||||
/* This called if new device is created in SPDK application
|
||||
|
@ -160,11 +160,13 @@ struct vbdev_ocf {
|
||||
TAILQ_ENTRY(vbdev_ocf) tailq;
|
||||
};
|
||||
|
||||
int vbdev_ocf_construct(
|
||||
void vbdev_ocf_construct(
|
||||
const char *vbdev_name,
|
||||
const char *cache_mode_name,
|
||||
const char *cache_name,
|
||||
const char *core_name);
|
||||
const char *core_name,
|
||||
void (*cb)(int, struct vbdev_ocf *, void *),
|
||||
void *cb_arg);
|
||||
|
||||
/* If vbdev is online, return its object */
|
||||
struct vbdev_ocf *vbdev_ocf_get_by_name(const char *name);
|
||||
|
@ -62,13 +62,31 @@ static const struct spdk_json_object_decoder rpc_construct_ocf_bdev_decoders[] =
|
||||
{"core_bdev_name", offsetof(struct rpc_construct_ocf_bdev, core_bdev_name), spdk_json_decode_string},
|
||||
};
|
||||
|
||||
static void
|
||||
construct_cb(int status, struct vbdev_ocf *vbdev, void *cb_arg)
|
||||
{
|
||||
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 create OCF vbdev: %d",
|
||||
status);
|
||||
} else {
|
||||
w = spdk_jsonrpc_begin_result(request);
|
||||
if (w) {
|
||||
spdk_json_write_string(w, vbdev->name);
|
||||
spdk_jsonrpc_end_result(request, w);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
spdk_rpc_construct_ocf_bdev(struct spdk_jsonrpc_request *request,
|
||||
const struct spdk_json_val *params)
|
||||
{
|
||||
int ret = 0;
|
||||
struct rpc_construct_ocf_bdev req = {NULL};
|
||||
struct spdk_json_write_ctx *w;
|
||||
int ret;
|
||||
|
||||
ret = spdk_json_decode_object(params, rpc_construct_ocf_bdev_decoders,
|
||||
SPDK_COUNTOF(rpc_construct_ocf_bdev_decoders),
|
||||
@ -76,24 +94,12 @@ spdk_rpc_construct_ocf_bdev(struct spdk_jsonrpc_request *request,
|
||||
if (ret) {
|
||||
spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INVALID_PARAMS,
|
||||
"Invalid parameters");
|
||||
goto end;
|
||||
free_rpc_construct_ocf_bdev(&req);
|
||||
return;
|
||||
}
|
||||
|
||||
ret = vbdev_ocf_construct(req.name, req.mode, req.cache_bdev_name, req.core_bdev_name);
|
||||
if (ret) {
|
||||
spdk_jsonrpc_send_error_response_fmt(request, SPDK_JSONRPC_ERROR_INTERNAL_ERROR,
|
||||
"Could not create OCF vbdev: %s",
|
||||
spdk_strerror(-ret));
|
||||
goto end;
|
||||
}
|
||||
|
||||
w = spdk_jsonrpc_begin_result(request);
|
||||
if (w) {
|
||||
spdk_json_write_string(w, req.name);
|
||||
spdk_jsonrpc_end_result(request, w);
|
||||
}
|
||||
|
||||
end:
|
||||
vbdev_ocf_construct(req.name, req.mode, req.cache_bdev_name, req.core_bdev_name,
|
||||
construct_cb, request);
|
||||
free_rpc_construct_ocf_bdev(&req);
|
||||
}
|
||||
SPDK_RPC_REGISTER("construct_ocf_bdev", spdk_rpc_construct_ocf_bdev, SPDK_RPC_RUNTIME)
|
||||
|
Loading…
x
Reference in New Issue
Block a user