Commit 1b3c65d3 authored by Shuhei Matsumoto's avatar Shuhei Matsumoto Committed by Tomasz Zawadzki
Browse files

bdev/nvme: Generalize rpc_bdev_nvme_reset_controller()



Generalize rpc_bdev_nvme_reset_controller() by adding an opcode
parameter and renaming it to rpc_bdev_nvme_controller_op() and adjusting
related functions and variables.

Based on these, the next patch will add bdev_nvme_enable_controller and
bdev_nvme_disable_controller RPCs.

Signed-off-by: default avatarShuhei Matsumoto <smatsumoto@nvidia.com>
Change-Id: I9da7626904def526d6ad692dba2ea7a488895636
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/18267


Reviewed-by: default avatarJim Harris <james.r.harris@intel.com>
Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: default avatarRichael <richael.zhuang@arm.com>
Reviewed-by: default avatarBen Walker <benjamin.walker@intel.com>
Community-CI: Mellanox Build Bot
parent 43cfaf81
Loading
Loading
Loading
Loading
+22 −16
Original line number Diff line number Diff line
@@ -1264,24 +1264,24 @@ rpc_bdev_nvme_get_transport_statistics(struct spdk_jsonrpc_request *request,
SPDK_RPC_REGISTER("bdev_nvme_get_transport_statistics", rpc_bdev_nvme_get_transport_statistics,
		  SPDK_RPC_RUNTIME)

struct rpc_bdev_nvme_reset_controller_req {
struct rpc_bdev_nvme_controller_op_req {
	char *name;
	uint16_t cntlid;
};

static void
free_rpc_bdev_nvme_reset_controller_req(struct rpc_bdev_nvme_reset_controller_req *r)
free_rpc_bdev_nvme_controller_op_req(struct rpc_bdev_nvme_controller_op_req *r)
{
	free(r->name);
}

static const struct spdk_json_object_decoder rpc_bdev_nvme_reset_controller_req_decoders[] = {
	{"name", offsetof(struct rpc_bdev_nvme_reset_controller_req, name), spdk_json_decode_string},
	{"cntlid", offsetof(struct rpc_bdev_nvme_reset_controller_req, cntlid), spdk_json_decode_uint16, true},
static const struct spdk_json_object_decoder rpc_bdev_nvme_controller_op_req_decoders[] = {
	{"name", offsetof(struct rpc_bdev_nvme_controller_op_req, name), spdk_json_decode_string},
	{"cntlid", offsetof(struct rpc_bdev_nvme_controller_op_req, cntlid), spdk_json_decode_uint16, true},
};

static void
rpc_bdev_nvme_reset_controller_cb(void *cb_arg, int rc)
rpc_bdev_nvme_controller_op_cb(void *cb_arg, int rc)
{
	struct spdk_jsonrpc_request *request = cb_arg;

@@ -1293,15 +1293,16 @@ rpc_bdev_nvme_reset_controller_cb(void *cb_arg, int rc)
}

static void
rpc_bdev_nvme_reset_controller(struct spdk_jsonrpc_request *request,
			       const struct spdk_json_val *params)
rpc_bdev_nvme_controller_op(struct spdk_jsonrpc_request *request,
			    const struct spdk_json_val *params,
			    enum nvme_ctrlr_op op)
{
	struct rpc_bdev_nvme_reset_controller_req req = {NULL};
	struct rpc_bdev_nvme_controller_op_req req = {NULL};
	struct nvme_bdev_ctrlr *nbdev_ctrlr;
	struct nvme_ctrlr *nvme_ctrlr;

	if (spdk_json_decode_object(params, rpc_bdev_nvme_reset_controller_req_decoders,
				    SPDK_COUNTOF(rpc_bdev_nvme_reset_controller_req_decoders),
	if (spdk_json_decode_object(params, rpc_bdev_nvme_controller_op_req_decoders,
				    SPDK_COUNTOF(rpc_bdev_nvme_controller_op_req_decoders),
				    &req)) {
		SPDK_ERRLOG("spdk_json_decode_object failed\n");
		spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INVALID_PARAMS, spdk_strerror(EINVAL));
@@ -1316,8 +1317,7 @@ rpc_bdev_nvme_reset_controller(struct spdk_jsonrpc_request *request,
	}

	if (req.cntlid == 0) {
		nvme_bdev_ctrlr_op_rpc(nbdev_ctrlr, NVME_CTRLR_OP_RESET,
				       rpc_bdev_nvme_reset_controller_cb, request);
		nvme_bdev_ctrlr_op_rpc(nbdev_ctrlr, op, rpc_bdev_nvme_controller_op_cb, request);
	} else {
		nvme_ctrlr = nvme_bdev_ctrlr_get_ctrlr_by_id(nbdev_ctrlr, req.cntlid);
		if (nvme_ctrlr == NULL) {
@@ -1325,12 +1325,18 @@ rpc_bdev_nvme_reset_controller(struct spdk_jsonrpc_request *request,
			spdk_jsonrpc_send_error_response(request, -ENODEV, spdk_strerror(ENODEV));
			goto exit;
		}
		nvme_ctrlr_op_rpc(nvme_ctrlr, NVME_CTRLR_OP_RESET,
				  rpc_bdev_nvme_reset_controller_cb, request);
		nvme_ctrlr_op_rpc(nvme_ctrlr, op, rpc_bdev_nvme_controller_op_cb, request);
	}

exit:
	free_rpc_bdev_nvme_reset_controller_req(&req);
	free_rpc_bdev_nvme_controller_op_req(&req);
}

static void
rpc_bdev_nvme_reset_controller(struct spdk_jsonrpc_request *request,
			       const struct spdk_json_val *params)
{
	rpc_bdev_nvme_controller_op(request, params, NVME_CTRLR_OP_RESET);
}
SPDK_RPC_REGISTER("bdev_nvme_reset_controller", rpc_bdev_nvme_reset_controller, SPDK_RPC_RUNTIME)