diff --git a/module/bdev/xnvme/bdev_xnvme.c b/module/bdev/xnvme/bdev_xnvme.c index 399288aa7..1aa539181 100644 --- a/module/bdev/xnvme/bdev_xnvme.c +++ b/module/bdev/xnvme/bdev_xnvme.c @@ -417,42 +417,15 @@ error_return: return NULL; } -struct delete_xnvme_bdev_ctx { - struct bdev_xnvme *xnvme; - spdk_delete_xnvme_complete cb_fn; - void *cb_arg; -}; - -static void -xnvme_bdev_unregister_cb(void *arg, int bdeverrno) -{ - struct delete_xnvme_bdev_ctx *ctx = arg; - - ctx->cb_fn(ctx->cb_arg, bdeverrno); - free(ctx); -} - void -delete_xnvme_bdev(struct spdk_bdev *bdev, spdk_delete_xnvme_complete cb_fn, void *cb_arg) +delete_xnvme_bdev(const char *name, spdk_bdev_unregister_cb cb_fn, void *cb_arg) { - struct delete_xnvme_bdev_ctx *ctx; - struct bdev_xnvme *xnvme = (struct bdev_xnvme *)bdev->ctxt; + int rc; - if (!bdev || bdev->module != &xnvme_if) { - cb_fn(cb_arg, -ENODEV); - return; + rc = spdk_bdev_unregister_by_name(name, &xnvme_if, cb_fn, cb_arg); + if (rc != 0) { + cb_fn(cb_arg, rc); } - - ctx = calloc(1, sizeof(*ctx)); - if (ctx == NULL) { - cb_fn(cb_arg, -ENOMEM); - return; - } - - ctx->xnvme = xnvme; - ctx->cb_fn = cb_fn; - ctx->cb_arg = cb_arg; - spdk_bdev_unregister(bdev, xnvme_bdev_unregister_cb, ctx); } static int diff --git a/module/bdev/xnvme/bdev_xnvme.h b/module/bdev/xnvme/bdev_xnvme.h index dbe2a6f00..383c6f587 100644 --- a/module/bdev/xnvme/bdev_xnvme.h +++ b/module/bdev/xnvme/bdev_xnvme.h @@ -13,11 +13,9 @@ #include "spdk/bdev_module.h" -typedef void (*spdk_delete_xnvme_complete)(void *cb_arg, int bdeverrno); - struct spdk_bdev *create_xnvme_bdev(const char *name, const char *filename, const char *io_mechanism, bool conserve_cpu); -void delete_xnvme_bdev(struct spdk_bdev *bdev, spdk_delete_xnvme_complete cb_fn, void *cb_arg); +void delete_xnvme_bdev(const char *name, spdk_bdev_unregister_cb cb_fn, void *cb_arg); #endif /* SPDK_BDEV_XNVME_H */ diff --git a/module/bdev/xnvme/bdev_xnvme_rpc.c b/module/bdev/xnvme/bdev_xnvme_rpc.c index 5144ca5df..d4d461667 100644 --- a/module/bdev/xnvme/bdev_xnvme_rpc.c +++ b/module/bdev/xnvme/bdev_xnvme_rpc.c @@ -35,11 +35,6 @@ static const struct spdk_json_object_decoder rpc_create_xnvme_decoders[] = { {"conserve_cpu", offsetof(struct rpc_create_xnvme, conserve_cpu), spdk_json_decode_bool, true}, }; -static void -dummy_bdev_event_cb(enum spdk_bdev_event_type type, struct spdk_bdev *bdev, void *ctx) -{ -} - /* Decode the parameters for this RPC method and properly create the xnvme * device. Error status returned in the failed cases. */ @@ -108,9 +103,6 @@ rpc_bdev_xnvme_delete(struct spdk_jsonrpc_request *request, const struct spdk_json_val *params) { struct rpc_delete_xnvme req = {NULL}; - struct spdk_bdev_desc *desc; - struct spdk_bdev *bdev = NULL; - int rc; if (spdk_json_decode_object(params, rpc_delete_xnvme_decoders, SPDK_COUNTOF(rpc_delete_xnvme_decoders), @@ -120,21 +112,7 @@ rpc_bdev_xnvme_delete(struct spdk_jsonrpc_request *request, goto cleanup; } - rc = spdk_bdev_open_ext(req.name, false, dummy_bdev_event_cb, NULL, &desc); - if (rc == 0) { - bdev = spdk_bdev_desc_get_bdev(desc); - spdk_bdev_close(desc); - } else { - spdk_jsonrpc_send_error_response(request, -ENODEV, spdk_strerror(ENODEV)); - goto cleanup; - } - - if (bdev == NULL) { - spdk_jsonrpc_send_error_response(request, -ENODEV, spdk_strerror(ENODEV)); - goto cleanup; - } - - delete_xnvme_bdev(bdev, _rpc_bdev_xnvme_delete_cb, request); + delete_xnvme_bdev(req.name, _rpc_bdev_xnvme_delete_cb, request); cleanup: free_rpc_delete_xnvme(&req);