From f91ba919c500b34c043bed607f99f762186f6f56 Mon Sep 17 00:00:00 2001 From: Shuhei Matsumoto Date: Fri, 20 Jan 2023 13:21:45 +0900 Subject: [PATCH] test/bdevio: Replace spdk_bdev_get_by_name() by spdk_bdev_open_ext() spdk_bdev_get_by_name() is also not safe and bdevio_construct_target() calls spdk_bdev_open_ext(). Hence, by adding a extra abstraction, remove spdk_bdev_get_by_name() call. Signed-off-by: Shuhei Matsumoto Change-Id: I6f4cbe82a02ff1affb215c7e2d8681d76d1afb96 Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/16535 Tested-by: SPDK CI Jenkins Reviewed-by: Jim Harris Reviewed-by: Aleksey Marchuk --- test/bdev/bdevio/bdevio.c | 42 +++++++++++++++++++++------------------ 1 file changed, 23 insertions(+), 19 deletions(-) diff --git a/test/bdev/bdevio/bdevio.c b/test/bdev/bdevio/bdevio.c index 7994b5651..def7df428 100644 --- a/test/bdev/bdevio/bdevio.c +++ b/test/bdev/bdevio/bdevio.c @@ -99,29 +99,34 @@ bdevio_construct_target_open_cb(enum spdk_bdev_event_type type, struct spdk_bdev } static int -bdevio_construct_target(void *ctx, struct spdk_bdev *bdev) +bdevio_construct_target_by_name(const char *bdev_name) { struct io_target *target; + struct spdk_bdev *bdev; + uint64_t num_blocks; + uint32_t block_size; int rc; - uint64_t num_blocks = spdk_bdev_get_num_blocks(bdev); - uint32_t block_size = spdk_bdev_get_block_size(bdev); target = malloc(sizeof(struct io_target)); if (target == NULL) { return -ENOMEM; } - rc = spdk_bdev_open_ext(spdk_bdev_get_name(bdev), true, bdevio_construct_target_open_cb, NULL, + rc = spdk_bdev_open_ext(bdev_name, true, bdevio_construct_target_open_cb, NULL, &target->bdev_desc); if (rc != 0) { free(target); - SPDK_ERRLOG("Could not open leaf bdev %s, error=%d\n", spdk_bdev_get_name(bdev), rc); + SPDK_ERRLOG("Could not open leaf bdev %s, error=%d\n", bdev_name, rc); return rc; } + bdev = spdk_bdev_desc_get_bdev(target->bdev_desc); + + num_blocks = spdk_bdev_get_num_blocks(bdev); + block_size = spdk_bdev_get_block_size(bdev); + printf(" %s: %" PRIu64 " blocks of %" PRIu32 " bytes (%" PRIu64 " MiB)\n", - spdk_bdev_get_name(bdev), - num_blocks, block_size, + bdev_name, num_blocks, block_size, (num_blocks * block_size + 1024 * 1024 - 1) / (1024 * 1024)); target->bdev = bdev; @@ -132,6 +137,14 @@ bdevio_construct_target(void *ctx, struct spdk_bdev *bdev) return 0; } +static int +bdevio_construct_target(void *ctx, struct spdk_bdev *bdev) +{ + const char *bdev_name = spdk_bdev_get_name(bdev); + + return bdevio_construct_target_by_name(bdev_name); +} + static int bdevio_construct_targets(void) { @@ -1482,7 +1495,6 @@ static void rpc_perform_tests(struct spdk_jsonrpc_request *request, const struct spdk_json_val *params) { struct rpc_perform_tests req = {NULL}; - struct spdk_bdev *bdev; int rc; if (params && spdk_json_decode_object(params, rpc_perform_tests_decoders, @@ -1494,20 +1506,12 @@ rpc_perform_tests(struct spdk_jsonrpc_request *request, const struct spdk_json_v } if (req.name) { - bdev = spdk_bdev_get_by_name(req.name); - if (bdev == NULL) { - SPDK_ERRLOG("Bdev '%s' does not exist\n", req.name); - spdk_jsonrpc_send_error_response_fmt(request, SPDK_JSONRPC_ERROR_INTERNAL_ERROR, - "Bdev '%s' does not exist: %s", - req.name, spdk_strerror(ENODEV)); - goto invalid; - } - rc = bdevio_construct_target(NULL, bdev); + rc = bdevio_construct_target_by_name(req.name); if (rc < 0) { - SPDK_ERRLOG("Could not construct target for bdev '%s'\n", spdk_bdev_get_name(bdev)); + SPDK_ERRLOG("Could not construct target for bdev '%s'\n", req.name); spdk_jsonrpc_send_error_response_fmt(request, SPDK_JSONRPC_ERROR_INTERNAL_ERROR, "Could not construct target for bdev '%s': %s", - spdk_bdev_get_name(bdev), spdk_strerror(-rc)); + req.name, spdk_strerror(-rc)); goto invalid; } } else {