bdev: Use spdk_bdev_open_ext() for some simple RPCs

Signed-off-by: Shuhei Matsumoto <smatsumoto@nvidia.com>
Change-Id: Ie13f3153ea711f64f2099b2e4d37855b79977f82
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/12148
Community-CI: Broadcom CI <spdk-ci.pdl@broadcom.com>
Community-CI: Mellanox Build Bot
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: Tomasz Zawadzki <tomasz.zawadzki@intel.com>
Reviewed-by: Aleksey Marchuk <alexeymar@mellanox.com>
This commit is contained in:
Shuhei Matsumoto 2022-04-04 20:03:13 +09:00 committed by Tomasz Zawadzki
parent 1906b0753e
commit f41248ffde

View File

@ -43,6 +43,11 @@
#include "spdk/log.h" #include "spdk/log.h"
static void
dummy_bdev_event_cb(enum spdk_bdev_event_type type, struct spdk_bdev *bdev, void *ctx)
{
}
struct spdk_rpc_set_bdev_opts { struct spdk_rpc_set_bdev_opts {
uint32_t bdev_io_pool_size; uint32_t bdev_io_pool_size;
uint32_t bdev_io_cache_size; uint32_t bdev_io_cache_size;
@ -615,7 +620,8 @@ rpc_bdev_set_qd_sampling_period(struct spdk_jsonrpc_request *request,
const struct spdk_json_val *params) const struct spdk_json_val *params)
{ {
struct rpc_bdev_set_qd_sampling_period req = {0}; struct rpc_bdev_set_qd_sampling_period req = {0};
struct spdk_bdev *bdev; struct spdk_bdev_desc *desc;
int rc;
if (spdk_json_decode_object(params, rpc_bdev_set_qd_sampling_period_decoders, if (spdk_json_decode_object(params, rpc_bdev_set_qd_sampling_period_decoders,
SPDK_COUNTOF(rpc_bdev_set_qd_sampling_period_decoders), SPDK_COUNTOF(rpc_bdev_set_qd_sampling_period_decoders),
@ -626,16 +632,18 @@ rpc_bdev_set_qd_sampling_period(struct spdk_jsonrpc_request *request,
goto cleanup; goto cleanup;
} }
bdev = spdk_bdev_get_by_name(req.name); rc = spdk_bdev_open_ext(req.name, false, dummy_bdev_event_cb, NULL, &desc);
if (bdev == NULL) { if (rc != 0) {
SPDK_ERRLOG("bdev '%s' does not exist\n", req.name); SPDK_ERRLOG("Failed to open bdev '%s': %d\n", req.name, rc);
spdk_jsonrpc_send_error_response(request, -ENODEV, spdk_strerror(ENODEV)); spdk_jsonrpc_send_error_response(request, rc, spdk_strerror(-rc));
goto cleanup; goto cleanup;
} }
spdk_bdev_set_qd_sampling_period(bdev, req.period); spdk_bdev_set_qd_sampling_period(spdk_bdev_desc_get_bdev(desc), req.period);
spdk_jsonrpc_send_bool_response(request, true); spdk_jsonrpc_send_bool_response(request, true);
spdk_bdev_close(desc);
cleanup: cleanup:
free_rpc_bdev_set_qd_sampling_period(&req); free_rpc_bdev_set_qd_sampling_period(&req);
} }
@ -700,8 +708,8 @@ rpc_bdev_set_qos_limit(struct spdk_jsonrpc_request *request,
const struct spdk_json_val *params) const struct spdk_json_val *params)
{ {
struct rpc_bdev_set_qos_limit req = {NULL, {UINT64_MAX, UINT64_MAX, UINT64_MAX, UINT64_MAX}}; struct rpc_bdev_set_qos_limit req = {NULL, {UINT64_MAX, UINT64_MAX, UINT64_MAX, UINT64_MAX}};
struct spdk_bdev *bdev; struct spdk_bdev_desc *desc;
int i; int i, rc;
if (spdk_json_decode_object(params, rpc_bdev_set_qos_limit_decoders, if (spdk_json_decode_object(params, rpc_bdev_set_qos_limit_decoders,
SPDK_COUNTOF(rpc_bdev_set_qos_limit_decoders), SPDK_COUNTOF(rpc_bdev_set_qos_limit_decoders),
@ -712,10 +720,10 @@ rpc_bdev_set_qos_limit(struct spdk_jsonrpc_request *request,
goto cleanup; goto cleanup;
} }
bdev = spdk_bdev_get_by_name(req.name); rc = spdk_bdev_open_ext(req.name, false, dummy_bdev_event_cb, NULL, &desc);
if (bdev == NULL) { if (rc != 0) {
SPDK_ERRLOG("bdev '%s' does not exist\n", req.name); SPDK_ERRLOG("Failed to open bdev '%s': %d\n", req.name, rc);
spdk_jsonrpc_send_error_response(request, -ENODEV, spdk_strerror(ENODEV)); spdk_jsonrpc_send_error_response(request, rc, spdk_strerror(-rc));
goto cleanup; goto cleanup;
} }
@ -726,11 +734,15 @@ rpc_bdev_set_qos_limit(struct spdk_jsonrpc_request *request,
} }
if (i == SPDK_BDEV_QOS_NUM_RATE_LIMIT_TYPES) { if (i == SPDK_BDEV_QOS_NUM_RATE_LIMIT_TYPES) {
SPDK_ERRLOG("no rate limits specified\n"); SPDK_ERRLOG("no rate limits specified\n");
spdk_bdev_close(desc);
spdk_jsonrpc_send_error_response(request, -EINVAL, "No rate limits specified"); spdk_jsonrpc_send_error_response(request, -EINVAL, "No rate limits specified");
goto cleanup; goto cleanup;
} }
spdk_bdev_set_qos_rate_limits(bdev, req.limits, rpc_bdev_set_qos_limit_complete, request); spdk_bdev_set_qos_rate_limits(spdk_bdev_desc_get_bdev(desc), req.limits,
rpc_bdev_set_qos_limit_complete, request);
spdk_bdev_close(desc);
cleanup: cleanup:
free_rpc_bdev_set_qos_limit(&req); free_rpc_bdev_set_qos_limit(&req);
@ -770,7 +782,8 @@ rpc_bdev_enable_histogram(struct spdk_jsonrpc_request *request,
const struct spdk_json_val *params) const struct spdk_json_val *params)
{ {
struct rpc_bdev_enable_histogram_request req = {NULL}; struct rpc_bdev_enable_histogram_request req = {NULL};
struct spdk_bdev *bdev; struct spdk_bdev_desc *desc;
int rc;
if (spdk_json_decode_object(params, rpc_bdev_enable_histogram_request_decoders, if (spdk_json_decode_object(params, rpc_bdev_enable_histogram_request_decoders,
SPDK_COUNTOF(rpc_bdev_enable_histogram_request_decoders), SPDK_COUNTOF(rpc_bdev_enable_histogram_request_decoders),
@ -781,13 +794,16 @@ rpc_bdev_enable_histogram(struct spdk_jsonrpc_request *request,
goto cleanup; goto cleanup;
} }
bdev = spdk_bdev_get_by_name(req.name); rc = spdk_bdev_open_ext(req.name, false, dummy_bdev_event_cb, NULL, &desc);
if (bdev == NULL) { if (rc != 0) {
spdk_jsonrpc_send_error_response(request, -ENODEV, spdk_strerror(ENODEV)); spdk_jsonrpc_send_error_response(request, rc, spdk_strerror(-rc));
goto cleanup; goto cleanup;
} }
spdk_bdev_histogram_enable(bdev, bdev_histogram_status_cb, request, req.enable); spdk_bdev_histogram_enable(spdk_bdev_desc_get_bdev(desc), bdev_histogram_status_cb,
request, req.enable);
spdk_bdev_close(desc);
cleanup: cleanup:
free_rpc_bdev_enable_histogram_request(&req); free_rpc_bdev_enable_histogram_request(&req);
@ -865,7 +881,8 @@ rpc_bdev_get_histogram(struct spdk_jsonrpc_request *request,
{ {
struct rpc_bdev_get_histogram_request req = {NULL}; struct rpc_bdev_get_histogram_request req = {NULL};
struct spdk_histogram_data *histogram; struct spdk_histogram_data *histogram;
struct spdk_bdev *bdev; struct spdk_bdev_desc *desc;
int rc;
if (spdk_json_decode_object(params, rpc_bdev_get_histogram_request_decoders, if (spdk_json_decode_object(params, rpc_bdev_get_histogram_request_decoders,
SPDK_COUNTOF(rpc_bdev_get_histogram_request_decoders), SPDK_COUNTOF(rpc_bdev_get_histogram_request_decoders),
@ -876,19 +893,23 @@ rpc_bdev_get_histogram(struct spdk_jsonrpc_request *request,
goto cleanup; goto cleanup;
} }
bdev = spdk_bdev_get_by_name(req.name); rc = spdk_bdev_open_ext(req.name, false, dummy_bdev_event_cb, NULL, &desc);
if (bdev == NULL) { if (rc != 0) {
spdk_jsonrpc_send_error_response(request, -ENODEV, spdk_strerror(ENODEV)); spdk_jsonrpc_send_error_response(request, rc, spdk_strerror(-rc));
goto cleanup; goto cleanup;
} }
histogram = spdk_histogram_data_alloc(); histogram = spdk_histogram_data_alloc();
if (histogram == NULL) { if (histogram == NULL) {
spdk_bdev_close(desc);
spdk_jsonrpc_send_error_response(request, -ENOMEM, spdk_strerror(ENOMEM)); spdk_jsonrpc_send_error_response(request, -ENOMEM, spdk_strerror(ENOMEM));
goto cleanup; goto cleanup;
} }
spdk_bdev_histogram_get(bdev, histogram, _rpc_bdev_histogram_data_cb, request); spdk_bdev_histogram_get(spdk_bdev_desc_get_bdev(desc), histogram,
_rpc_bdev_histogram_data_cb, request);
spdk_bdev_close(desc);
cleanup: cleanup:
free_rpc_bdev_get_histogram_request(&req); free_rpc_bdev_get_histogram_request(&req);