From 02e3c62cb10cd29f242cb33b07117c9f3267092b Mon Sep 17 00:00:00 2001 From: Shuhei Matsumoto Date: Tue, 29 Mar 2022 16:44:58 +0900 Subject: [PATCH] bdev/null: Use bdev_open_ext() for resize instead of bdev_get_by_name() Signed-off-by: Shuhei Matsumoto Change-Id: I9381aad017fae63b725deb21790bf4e3f717c88e Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/12072 Tested-by: SPDK CI Jenkins Community-CI: Broadcom CI Community-CI: Mellanox Build Bot Reviewed-by: Aleksey Marchuk Reviewed-by: Ben Walker Reviewed-by: Jim Harris --- module/bdev/null/bdev_null.c | 32 +++++++++++++++++++++++++------- module/bdev/null/bdev_null.h | 4 ++-- module/bdev/null/bdev_null_rpc.c | 9 +-------- 3 files changed, 28 insertions(+), 17 deletions(-) diff --git a/module/bdev/null/bdev_null.c b/module/bdev/null/bdev_null.c index 10b8d4ba4..1f25753f0 100644 --- a/module/bdev/null/bdev_null.c +++ b/module/bdev/null/bdev_null.c @@ -420,21 +420,38 @@ bdev_null_initialize(void) return 0; } -int -bdev_null_resize(struct spdk_bdev *bdev, const uint64_t new_size_in_mb) +static void +dummy_bdev_event_cb(enum spdk_bdev_event_type type, struct spdk_bdev *bdev, void *ctx) { +} + +int +bdev_null_resize(const char *bdev_name, const uint64_t new_size_in_mb) +{ + struct spdk_bdev_desc *desc; + struct spdk_bdev *bdev; uint64_t current_size_in_mb; uint64_t new_size_in_byte; - int rc; + int rc = 0; + + rc = spdk_bdev_open_ext(bdev_name, false, dummy_bdev_event_cb, NULL, &desc); + if (rc != 0) { + SPDK_ERRLOG("failed to open bdev; %s.\n", bdev_name); + return rc; + } + + bdev = spdk_bdev_desc_get_bdev(desc); if (bdev->module != &null_if) { - return -EINVAL; + rc = -EINVAL; + goto exit; } current_size_in_mb = bdev->blocklen * bdev->blockcnt / (1024 * 1024); if (new_size_in_mb < current_size_in_mb) { SPDK_ERRLOG("The new bdev size must not be smaller than current bdev size.\n"); - return -EINVAL; + rc = -EINVAL; + goto exit; } new_size_in_byte = new_size_in_mb * 1024 * 1024; @@ -442,10 +459,11 @@ bdev_null_resize(struct spdk_bdev *bdev, const uint64_t new_size_in_mb) rc = spdk_bdev_notify_blockcnt_change(bdev, new_size_in_byte / bdev->blocklen); if (rc != 0) { SPDK_ERRLOG("failed to notify block cnt change.\n"); - return rc; } - return 0; +exit: + spdk_bdev_close(desc); + return rc; } static void diff --git a/module/bdev/null/bdev_null.h b/module/bdev/null/bdev_null.h index ea8332cb7..ad8046587 100644 --- a/module/bdev/null/bdev_null.h +++ b/module/bdev/null/bdev_null.h @@ -66,9 +66,9 @@ void bdev_null_delete(const char *bdev_name, spdk_delete_null_complete cb_fn, /** * Resize null bdev. * - * \param bdev Pointer to null bdev. + * \param bdev_name Name of null bdev. * \param new_size_in_mb The new size in MiB for this bdev */ -int bdev_null_resize(struct spdk_bdev *bdev, const uint64_t new_size_in_mb); +int bdev_null_resize(const char *bdev_name, const uint64_t new_size_in_mb); #endif /* SPDK_BDEV_NULL_H */ diff --git a/module/bdev/null/bdev_null_rpc.c b/module/bdev/null/bdev_null_rpc.c index 92262d7e2..a4fab9d5f 100644 --- a/module/bdev/null/bdev_null_rpc.c +++ b/module/bdev/null/bdev_null_rpc.c @@ -225,7 +225,6 @@ spdk_rpc_bdev_null_resize(struct spdk_jsonrpc_request *request, const struct spdk_json_val *params) { struct rpc_bdev_null_resize req = {}; - struct spdk_bdev *bdev; int rc; if (spdk_json_decode_object(params, rpc_bdev_null_resize_decoders, @@ -236,13 +235,7 @@ spdk_rpc_bdev_null_resize(struct spdk_jsonrpc_request *request, goto cleanup; } - bdev = spdk_bdev_get_by_name(req.name); - if (bdev == NULL) { - spdk_jsonrpc_send_error_response(request, -ENODEV, spdk_strerror(ENODEV)); - goto cleanup; - } - - rc = bdev_null_resize(bdev, req.new_size); + rc = bdev_null_resize(req.name, req.new_size); if (rc) { spdk_jsonrpc_send_error_response(request, rc, spdk_strerror(-rc)); goto cleanup;