Commit 6ee39210 authored by Rafal Stefanowski's avatar Rafal Stefanowski Committed by Tomasz Zawadzki
Browse files

bdev/ocf: Create common structures and functions



Use common structures, decoders and free functions in
RPC methods that use only bdev name as a parameter.

Signed-off-by: default avatarRafal Stefanowski <rafal.stefanowski@intel.com>
Change-Id: I49668d744dcb7ba901df42cb5279c9e425f71041
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/15457


Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Community-CI: Mellanox Build Bot
Reviewed-by: default avatarJim Harris <james.r.harris@intel.com>
Reviewed-by: default avatarTomasz Zawadzki <tomasz.zawadzki@intel.com>
parent c6ffad06
Loading
Loading
Loading
Loading
+29 −54
Original line number Diff line number Diff line
@@ -10,6 +10,24 @@
#include "spdk/rpc.h"
#include "spdk/string.h"

/* Common structure to hold the name parameter for RPC methods using bdev name only. */
struct rpc_bdev_ocf_name {
	char *name;             /* main vbdev name */
};

/* Common free function for RPC methods using bdev name only. */
static void
free_rpc_bdev_ocf_name(struct rpc_bdev_ocf_name *r)
{
	free(r->name);
}

/* Common function to decode the name input parameter for RPC methods using bdev name only. */
static const struct spdk_json_object_decoder rpc_bdev_ocf_name_decoders[] = {
	{"name", offsetof(struct rpc_bdev_ocf_name, name), spdk_json_decode_string},
};


/* Structure to hold the parameters for this RPC method. */
struct rpc_bdev_ocf_create {
	char *name;			/* main vbdev */
@@ -77,22 +95,6 @@ rpc_bdev_ocf_create(struct spdk_jsonrpc_request *request,
}
SPDK_RPC_REGISTER("bdev_ocf_create", rpc_bdev_ocf_create, SPDK_RPC_RUNTIME)

/* Structure to hold the parameters for this RPC method. */
struct rpc_bdev_ocf_delete {
	char *name;             /* main vbdev name */
};

static void
free_rpc_bdev_ocf_delete(struct rpc_bdev_ocf_delete *r)
{
	free(r->name);
}

/* Structure to decode the input parameters for this RPC method. */
static const struct spdk_json_object_decoder rpc_bdev_ocf_delete_decoders[] = {
	{"name", offsetof(struct rpc_bdev_ocf_delete, name), spdk_json_decode_string},
};

static void
delete_cb(void *cb_arg, int status)
{
@@ -111,12 +113,12 @@ static void
rpc_bdev_ocf_delete(struct spdk_jsonrpc_request *request,
		    const struct spdk_json_val *params)
{
	struct rpc_bdev_ocf_delete req = {NULL};
	struct rpc_bdev_ocf_name req = {NULL};
	struct vbdev_ocf *vbdev;
	int status;

	status = spdk_json_decode_object(params, rpc_bdev_ocf_delete_decoders,
					 SPDK_COUNTOF(rpc_bdev_ocf_delete_decoders),
	status = spdk_json_decode_object(params, rpc_bdev_ocf_name_decoders,
					 SPDK_COUNTOF(rpc_bdev_ocf_name_decoders),
					 &req);
	if (status) {
		spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INVALID_PARAMS,
@@ -140,26 +142,10 @@ rpc_bdev_ocf_delete(struct spdk_jsonrpc_request *request,
	}

end:
	free_rpc_bdev_ocf_delete(&req);
	free_rpc_bdev_ocf_name(&req);
}
SPDK_RPC_REGISTER("bdev_ocf_delete", rpc_bdev_ocf_delete, SPDK_RPC_RUNTIME)

/* Structure to hold the parameters for this RPC method. */
struct rpc_bdev_ocf_get_stats {
	char *name;             /* main vbdev name */
};

static void
free_rpc_bdev_ocf_get_stats(struct rpc_bdev_ocf_get_stats *r)
{
	free(r->name);
}

/* Structure to decode the input parameters for this RPC method. */
static const struct spdk_json_object_decoder rpc_bdev_ocf_get_stats_decoders[] = {
	{"name", offsetof(struct rpc_bdev_ocf_get_stats, name), spdk_json_decode_string},
};

struct get_ocf_stats_ctx {
	struct spdk_jsonrpc_request *request;
	char *core_name;
@@ -201,7 +187,7 @@ static void
rpc_bdev_ocf_get_stats(struct spdk_jsonrpc_request *request,
		       const struct spdk_json_val *params)
{
	struct rpc_bdev_ocf_get_stats req = {NULL};
	struct rpc_bdev_ocf_name req = {NULL};
	struct vbdev_ocf *vbdev;
	struct get_ocf_stats_ctx *ctx;

@@ -212,8 +198,8 @@ rpc_bdev_ocf_get_stats(struct spdk_jsonrpc_request *request,
		goto end;
	}

	if (spdk_json_decode_object(params, rpc_bdev_ocf_get_stats_decoders,
				    SPDK_COUNTOF(rpc_bdev_ocf_get_stats_decoders),
	if (spdk_json_decode_object(params, rpc_bdev_ocf_name_decoders,
				    SPDK_COUNTOF(rpc_bdev_ocf_name_decoders),
				    &req)) {
		spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INVALID_PARAMS,
						 "Invalid parameters");
@@ -234,24 +220,13 @@ rpc_bdev_ocf_get_stats(struct spdk_jsonrpc_request *request,
	ocf_mngt_cache_read_lock(vbdev->ocf_cache, rpc_bdev_ocf_get_stats_cmpl, ctx);

end:
	free_rpc_bdev_ocf_get_stats(&req);
	free_rpc_bdev_ocf_name(&req);
}
SPDK_RPC_REGISTER("bdev_ocf_get_stats", rpc_bdev_ocf_get_stats, SPDK_RPC_RUNTIME)

/* Structure to hold the parameters for this RPC method. */
struct rpc_bdev_ocf_get_bdevs {
	char *name;
};

static void
free_rpc_bdev_ocf_get_bdevs(struct rpc_bdev_ocf_get_bdevs *r)
{
	free(r->name);
}

/* Structure to decode the input parameters for this RPC method. */
static const struct spdk_json_object_decoder rpc_bdev_ocf_get_bdevs_decoders[] = {
	{"name", offsetof(struct rpc_bdev_ocf_get_bdevs, name), spdk_json_decode_string, true},
	{"name", offsetof(struct rpc_bdev_ocf_name, name), spdk_json_decode_string, true},
};

struct bdev_get_bdevs_ctx {
@@ -294,7 +269,7 @@ rpc_bdev_ocf_get_bdevs(struct spdk_jsonrpc_request *request,
		       const struct spdk_json_val *params)
{
	struct spdk_json_write_ctx *w;
	struct rpc_bdev_ocf_get_bdevs req = {NULL};
	struct rpc_bdev_ocf_name req = {NULL};
	struct bdev_get_bdevs_ctx cctx;

	if (params && spdk_json_decode_object(params, rpc_bdev_ocf_get_bdevs_decoders,
@@ -325,7 +300,7 @@ rpc_bdev_ocf_get_bdevs(struct spdk_jsonrpc_request *request,
	spdk_jsonrpc_end_result(request, w);

end:
	free_rpc_bdev_ocf_get_bdevs(&req);
	free_rpc_bdev_ocf_name(&req);
}
SPDK_RPC_REGISTER("bdev_ocf_get_bdevs", rpc_bdev_ocf_get_bdevs, SPDK_RPC_RUNTIME)