From 75896c2510ee37821f1760f5090c07d055761b7c Mon Sep 17 00:00:00 2001 From: Daniel Verkamp Date: Fri, 18 May 2018 08:55:43 -0700 Subject: [PATCH] bdev/rpc: make get_bdevs/config "name" params optional The whole params object is already optional, but making the parameter optional as well allows the specification of an empty object for params to work. Some JSON-RPC clients make it more difficult to omit the params object entirely; see issue #303. Change-Id: If0ac4ebfba33fd2c85f729d2f1109e4d0e47aa3b Signed-off-by: Daniel Verkamp Reviewed-on: https://review.gerrithub.io/411740 Tested-by: SPDK Automated Test System Reviewed-by: Jim Harris Reviewed-by: Ben Walker --- lib/bdev/rpc/bdev_rpc.c | 34 ++++++++++++++-------------------- 1 file changed, 14 insertions(+), 20 deletions(-) diff --git a/lib/bdev/rpc/bdev_rpc.c b/lib/bdev/rpc/bdev_rpc.c index 522e659b0..bc115d1a9 100644 --- a/lib/bdev/rpc/bdev_rpc.c +++ b/lib/bdev/rpc/bdev_rpc.c @@ -119,7 +119,7 @@ free_rpc_get_bdevs(struct rpc_get_bdevs *r) } static const struct spdk_json_object_decoder rpc_get_bdevs_decoders[] = { - {"name", offsetof(struct rpc_get_bdevs, name), spdk_json_decode_string}, + {"name", offsetof(struct rpc_get_bdevs, name), spdk_json_decode_string, true}, }; static void @@ -130,28 +130,22 @@ spdk_rpc_get_bdevs(struct spdk_jsonrpc_request *request, struct spdk_json_write_ctx *w; struct spdk_bdev *bdev = NULL; - if (params != NULL) { - if (spdk_json_decode_object(params, rpc_get_bdevs_decoders, - SPDK_COUNTOF(rpc_get_bdevs_decoders), - &req)) { - SPDK_ERRLOG("spdk_json_decode_object failed\n"); + if (params && spdk_json_decode_object(params, rpc_get_bdevs_decoders, + SPDK_COUNTOF(rpc_get_bdevs_decoders), + &req)) { + SPDK_ERRLOG("spdk_json_decode_object failed\n"); + goto invalid; + } + + if (req.name) { + bdev = spdk_bdev_get_by_name(req.name); + if (bdev == NULL) { + SPDK_ERRLOG("bdev '%s' does not exist\n", req.name); goto invalid; - } else { - if (req.name == NULL) { - SPDK_ERRLOG("missing name param\n"); - goto invalid; - } - - bdev = spdk_bdev_get_by_name(req.name); - if (bdev == NULL) { - SPDK_ERRLOG("bdev '%s' does not exist\n", req.name); - goto invalid; - } - - free_rpc_get_bdevs(&req); } } + free_rpc_get_bdevs(&req); w = spdk_jsonrpc_begin_result(request); if (w == NULL) { return; @@ -191,7 +185,7 @@ free_rpc_get_bdevs_config(struct rpc_get_bdevs_config *r) } static const struct spdk_json_object_decoder rpc_dump_bdevs_config_decoders[] = { - {"name", offsetof(struct rpc_get_bdevs_config, name), spdk_json_decode_string}, + {"name", offsetof(struct rpc_get_bdevs_config, name), spdk_json_decode_string, true}, }; static void