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;