module/bdev: Use spdk_bdev_unregister_by_name() if possible

Replace spdk_bdev_get_by_name() + spdk_bdev_unregister() by
spdk_bdev_unregister_by_name() wherever possible.

This simplifies the code and makes the code more reliable.

Signed-off-by: Shuhei Matsumoto <smatsumoto@nvidia.com>
Change-Id: I91388c9d0b2e244cb745720a480803b03c42a226
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/12066
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: Ben Walker <benjamin.walker@intel.com>
Reviewed-by: Aleksey Marchuk <alexeymar@mellanox.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
This commit is contained in:
Shuhei Matsumoto 2022-03-29 14:55:53 +09:00 committed by Tomasz Zawadzki
parent d3e394ae3f
commit 4573e4cc23
39 changed files with 165 additions and 246 deletions

View File

@ -867,14 +867,10 @@ aio_bdev_unregister_cb(void *arg, int bdeverrno)
}
void
bdev_aio_delete(struct spdk_bdev *bdev, delete_aio_bdev_complete cb_fn, void *cb_arg)
bdev_aio_delete(const char *name, delete_aio_bdev_complete cb_fn, void *cb_arg)
{
struct delete_aio_bdev_ctx *ctx;
if (!bdev || bdev->module != &aio_if) {
cb_fn(cb_arg, -ENODEV);
return;
}
int rc;
ctx = calloc(1, sizeof(*ctx));
if (ctx == NULL) {
@ -884,7 +880,10 @@ bdev_aio_delete(struct spdk_bdev *bdev, delete_aio_bdev_complete cb_fn, void *cb
ctx->cb_fn = cb_fn;
ctx->cb_arg = cb_arg;
spdk_bdev_unregister(bdev, aio_bdev_unregister_cb, ctx);
rc = spdk_bdev_unregister_by_name(name, &aio_if, aio_bdev_unregister_cb, ctx);
if (rc != 0) {
aio_bdev_unregister_cb(ctx, rc);
}
}
static int

View File

@ -42,6 +42,6 @@ typedef void (*delete_aio_bdev_complete)(void *cb_arg, int bdeverrno);
int create_aio_bdev(const char *name, const char *filename, uint32_t block_size);
int bdev_aio_rescan(struct spdk_bdev *bdev);
void bdev_aio_delete(struct spdk_bdev *bdev, delete_aio_bdev_complete cb_fn, void *cb_arg);
void bdev_aio_delete(const char *name, delete_aio_bdev_complete cb_fn, void *cb_arg);
#endif /* SPDK_BDEV_AIO_H */

View File

@ -180,7 +180,6 @@ rpc_bdev_aio_delete(struct spdk_jsonrpc_request *request,
const struct spdk_json_val *params)
{
struct rpc_delete_aio req = {NULL};
struct spdk_bdev *bdev;
if (spdk_json_decode_object(params, rpc_delete_aio_decoders,
SPDK_COUNTOF(rpc_delete_aio_decoders),
@ -190,13 +189,7 @@ rpc_bdev_aio_delete(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;
}
bdev_aio_delete(bdev, _rpc_bdev_aio_delete_cb, request);
bdev_aio_delete(req.name, _rpc_bdev_aio_delete_cb, request);
cleanup:
free_rpc_delete_aio(&req);

View File

@ -2085,29 +2085,28 @@ error_vbdev_alloc:
/* RPC entry for deleting a crypto vbdev. */
void
delete_crypto_disk(struct spdk_bdev *bdev, spdk_delete_crypto_complete cb_fn,
delete_crypto_disk(const char *bdev_name, spdk_delete_crypto_complete cb_fn,
void *cb_arg)
{
struct bdev_names *name;
int rc;
if (!bdev || bdev->module != &crypto_if) {
cb_fn(cb_arg, -ENODEV);
return;
}
/* Remove the association (vbdev, bdev) from g_bdev_names. This is required so that the
* vbdev does not get re-created if the same bdev is constructed at some other time,
* unless the underlying bdev was hot-removed.
*/
TAILQ_FOREACH(name, &g_bdev_names, link) {
if (strcmp(name->opts->vbdev_name, bdev->name) == 0) {
vbdev_crypto_delete_name(name);
break;
/* Some cleanup happens in the destruct callback. */
rc = spdk_bdev_unregister_by_name(bdev_name, &crypto_if, cb_fn, cb_arg);
if (rc == 0) {
/* Remove the association (vbdev, bdev) from g_bdev_names. This is required so that the
* vbdev does not get re-created if the same bdev is constructed at some other time,
* unless the underlying bdev was hot-removed.
*/
TAILQ_FOREACH(name, &g_bdev_names, link) {
if (strcmp(name->opts->vbdev_name, bdev_name) == 0) {
vbdev_crypto_delete_name(name);
break;
}
}
} else {
cb_fn(cb_arg, rc);
}
/* Additional cleanup happens in the destruct callback. */
spdk_bdev_unregister(bdev, cb_fn, cb_arg);
}
/* Because we specified this function in our crypto bdev function table when we

View File

@ -92,11 +92,11 @@ int create_crypto_disk(struct vbdev_crypto_opts *opts);
/**
* Delete crypto bdev.
*
* \param bdev Pointer to crypto bdev.
* \param bdev_name Crypto bdev name.
* \param cb_fn Function to call after deletion.
* \param cb_arg Argument to pass to cb_fn.
*/
void delete_crypto_disk(struct spdk_bdev *bdev, spdk_delete_crypto_complete cb_fn,
void delete_crypto_disk(const char *bdev_name, spdk_delete_crypto_complete cb_fn,
void *cb_arg);
/**

View File

@ -321,7 +321,6 @@ rpc_bdev_crypto_delete(struct spdk_jsonrpc_request *request,
const struct spdk_json_val *params)
{
struct rpc_delete_crypto req = {NULL};
struct spdk_bdev *bdev;
if (spdk_json_decode_object(params, rpc_delete_crypto_decoders,
SPDK_COUNTOF(rpc_delete_crypto_decoders),
@ -331,13 +330,7 @@ rpc_bdev_crypto_delete(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;
}
delete_crypto_disk(bdev, rpc_bdev_crypto_delete_cb, request);
delete_crypto_disk(req.name, rpc_bdev_crypto_delete_cb, request);
free_rpc_delete_crypto(&req);

View File

@ -887,26 +887,25 @@ create_delay_disk(const char *bdev_name, const char *vbdev_name, uint64_t avg_re
}
void
delete_delay_disk(struct spdk_bdev *bdev, spdk_bdev_unregister_cb cb_fn, void *cb_arg)
delete_delay_disk(const char *vbdev_name, spdk_bdev_unregister_cb cb_fn, void *cb_arg)
{
struct bdev_association *assoc;
int rc;
if (!bdev || bdev->module != &delay_if) {
cb_fn(cb_arg, -ENODEV);
return;
}
TAILQ_FOREACH(assoc, &g_bdev_associations, link) {
if (strcmp(assoc->vbdev_name, bdev->name) == 0) {
TAILQ_REMOVE(&g_bdev_associations, assoc, link);
free(assoc->bdev_name);
free(assoc->vbdev_name);
free(assoc);
break;
rc = spdk_bdev_unregister_by_name(vbdev_name, &delay_if, cb_fn, cb_arg);
if (rc == 0) {
TAILQ_FOREACH(assoc, &g_bdev_associations, link) {
if (strcmp(assoc->vbdev_name, vbdev_name) == 0) {
TAILQ_REMOVE(&g_bdev_associations, assoc, link);
free(assoc->bdev_name);
free(assoc->vbdev_name);
free(assoc);
break;
}
}
} else {
cb_fn(cb_arg, rc);
}
spdk_bdev_unregister(bdev, cb_fn, cb_arg);
}
static void

View File

@ -64,11 +64,11 @@ int create_delay_disk(const char *bdev_name, const char *vbdev_name, uint64_t av
/**
* Delete delay bdev.
*
* \param bdev Pointer to delay bdev.
* \param vbdev_name Name of the delay bdev.
* \param cb_fn Function to call after deletion.
* \param cb_arg Argument to pass to cb_fn.
*/
void delete_delay_disk(struct spdk_bdev *bdev, spdk_bdev_unregister_cb cb_fn,
void delete_delay_disk(const char *vbdev_name, spdk_bdev_unregister_cb cb_fn,
void *cb_arg);
/**

View File

@ -199,7 +199,6 @@ rpc_bdev_delay_delete(struct spdk_jsonrpc_request *request,
const struct spdk_json_val *params)
{
struct rpc_delete_delay req = {NULL};
struct spdk_bdev *bdev;
if (spdk_json_decode_object(params, rpc_delete_delay_decoders,
SPDK_COUNTOF(rpc_delete_delay_decoders),
@ -209,13 +208,7 @@ rpc_bdev_delay_delete(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;
}
delete_delay_disk(bdev, rpc_bdev_delay_delete_cb, request);
delete_delay_disk(req.name, rpc_bdev_delay_delete_cb, request);
cleanup:
free_rpc_delete_delay(&req);

View File

@ -332,14 +332,14 @@ vbdev_error_create(const char *base_bdev_name)
}
void
vbdev_error_delete(struct spdk_bdev *vbdev, spdk_delete_error_complete cb_fn, void *cb_arg)
vbdev_error_delete(const char *error_vbdev_name, spdk_delete_error_complete cb_fn, void *cb_arg)
{
if (!vbdev || vbdev->module != &error_if) {
cb_fn(cb_arg, -ENODEV);
return;
}
int rc;
spdk_bdev_unregister(vbdev, cb_fn, cb_arg);
rc = spdk_bdev_unregister_by_name(error_vbdev_name, &error_if, cb_fn, cb_arg);
if (rc != 0) {
cb_fn(cb_arg, rc);
}
}
static void

View File

@ -55,11 +55,11 @@ int vbdev_error_create(const char *base_bdev_name);
/**
* Delete vbdev used to inject errors.
*
* \param bdev Pointer to error vbdev.
* \param error_vbdev_name Name of the error vbdev.
* \param cb_fn Function to call after deletion.
* \param cb_arg Arguments to pass to cb_fn.
*/
void vbdev_error_delete(struct spdk_bdev *vbdev, spdk_delete_error_complete cb_fn,
void vbdev_error_delete(const char *error_vbdev_name, spdk_delete_error_complete cb_fn,
void *cb_arg);
/**

View File

@ -147,7 +147,6 @@ rpc_bdev_error_delete(struct spdk_jsonrpc_request *request,
const struct spdk_json_val *params)
{
struct rpc_delete_error req = {NULL};
struct spdk_bdev *vbdev;
if (spdk_json_decode_object(params, rpc_delete_error_decoders,
SPDK_COUNTOF(rpc_delete_error_decoders),
@ -157,13 +156,7 @@ rpc_bdev_error_delete(struct spdk_jsonrpc_request *request,
goto cleanup;
}
vbdev = spdk_bdev_get_by_name(req.name);
if (vbdev == NULL) {
spdk_jsonrpc_send_error_response(request, -ENODEV, spdk_strerror(ENODEV));
goto cleanup;
}
vbdev_error_delete(vbdev, rpc_bdev_error_delete_cb, request);
vbdev_error_delete(req.name, rpc_bdev_error_delete_cb, request);
cleanup:
free_rpc_delete_error(&req);

View File

@ -455,15 +455,12 @@ bdev_ftl_initialize(void)
void
bdev_ftl_delete_bdev(const char *name, spdk_bdev_unregister_cb cb_fn, void *cb_arg)
{
struct spdk_bdev *bdev;
int rc;
bdev = spdk_bdev_get_by_name(name);
if (bdev) {
spdk_bdev_unregister(bdev, cb_fn, cb_arg);
return;
rc = spdk_bdev_unregister_by_name(name, &g_ftl_if, cb_fn, cb_arg);
if (rc != 0) {
cb_fn(cb_arg, rc);
}
cb_fn(cb_arg, -ENODEV);
}
static void

View File

@ -1065,14 +1065,14 @@ err:
}
void
delete_iscsi_disk(struct spdk_bdev *bdev, spdk_delete_iscsi_complete cb_fn, void *cb_arg)
delete_iscsi_disk(const char *bdev_name, spdk_delete_iscsi_complete cb_fn, void *cb_arg)
{
if (!bdev || bdev->module != &g_iscsi_bdev_module) {
cb_fn(cb_arg, -ENODEV);
return;
}
int rc;
spdk_bdev_unregister(bdev, cb_fn, cb_arg);
rc = spdk_bdev_unregister_by_name(bdev_name, &g_iscsi_bdev_module, cb_fn, cb_arg);
if (rc != 0) {
cb_fn(cb_arg, rc);
}
}
static int

View File

@ -66,10 +66,10 @@ int create_iscsi_disk(const char *bdev_name, const char *url, const char *initia
/**
* Delete iSCSI bdev.
*
* \param bdev Pointer to iSCSI bdev.
* \param bdev_name Name of iSCSI bdev.
* \param cb_fn Completion callback
* \param cb_arg Completion callback custom arguments
*/
void delete_iscsi_disk(struct spdk_bdev *bdev, spdk_delete_iscsi_complete cb_fn, void *cb_arg);
void delete_iscsi_disk(const char *bdev_name, spdk_delete_iscsi_complete cb_fn, void *cb_arg);
#endif /* SPDK_BDEV_ISCSI_H */

View File

@ -135,7 +135,6 @@ rpc_bdev_iscsi_delete(struct spdk_jsonrpc_request *request,
const struct spdk_json_val *params)
{
struct rpc_delete_iscsi req = {NULL};
struct spdk_bdev *bdev;
if (spdk_json_decode_object(params, rpc_delete_iscsi_decoders,
SPDK_COUNTOF(rpc_delete_iscsi_decoders),
@ -145,13 +144,7 @@ rpc_bdev_iscsi_delete(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;
}
delete_iscsi_disk(bdev, rpc_bdev_iscsi_delete_cb, request);
delete_iscsi_disk(req.name, rpc_bdev_iscsi_delete_cb, request);
cleanup:
free_rpc_delete_iscsi(&req);

View File

@ -468,14 +468,14 @@ create_malloc_disk(struct spdk_bdev **bdev, const char *name, const struct spdk_
}
void
delete_malloc_disk(struct spdk_bdev *bdev, spdk_delete_malloc_complete cb_fn, void *cb_arg)
delete_malloc_disk(const char *name, spdk_delete_malloc_complete cb_fn, void *cb_arg)
{
if (!bdev || bdev->module != &malloc_if) {
cb_fn(cb_arg, -ENODEV);
return;
}
int rc;
spdk_bdev_unregister(bdev, cb_fn, cb_arg);
rc = spdk_bdev_unregister_by_name(name, &malloc_if, cb_fn, cb_arg);
if (rc != 0) {
cb_fn(cb_arg, rc);
}
}
static int

View File

@ -44,6 +44,6 @@ typedef void (*spdk_delete_malloc_complete)(void *cb_arg, int bdeverrno);
int create_malloc_disk(struct spdk_bdev **bdev, const char *name, const struct spdk_uuid *uuid,
uint64_t num_blocks, uint32_t block_size, uint32_t optimal_io_boundary);
void delete_malloc_disk(struct spdk_bdev *bdev, spdk_delete_malloc_complete cb_fn, void *cb_arg);
void delete_malloc_disk(const char *name, spdk_delete_malloc_complete cb_fn, void *cb_arg);
#endif /* SPDK_BDEV_MALLOC_H */

View File

@ -148,7 +148,6 @@ rpc_bdev_malloc_delete(struct spdk_jsonrpc_request *request,
const struct spdk_json_val *params)
{
struct rpc_delete_malloc req = {NULL};
struct spdk_bdev *bdev;
if (spdk_json_decode_object(params, rpc_delete_malloc_decoders,
SPDK_COUNTOF(rpc_delete_malloc_decoders),
@ -159,14 +158,7 @@ rpc_bdev_malloc_delete(struct spdk_jsonrpc_request *request,
goto cleanup;
}
bdev = spdk_bdev_get_by_name(req.name);
if (bdev == NULL) {
SPDK_INFOLOG(bdev_malloc, "bdev '%s' does not exist\n", req.name);
spdk_jsonrpc_send_error_response(request, -ENODEV, spdk_strerror(ENODEV));
goto cleanup;
}
delete_malloc_disk(bdev, rpc_bdev_malloc_delete_cb, request);
delete_malloc_disk(req.name, rpc_bdev_malloc_delete_cb, request);
cleanup:
free_rpc_delete_malloc(&req);

View File

@ -344,14 +344,14 @@ bdev_null_create(struct spdk_bdev **bdev, const struct spdk_null_bdev_opts *opts
}
void
bdev_null_delete(struct spdk_bdev *bdev, spdk_delete_null_complete cb_fn, void *cb_arg)
bdev_null_delete(const char *bdev_name, spdk_delete_null_complete cb_fn, void *cb_arg)
{
if (!bdev || bdev->module != &null_if) {
cb_fn(cb_arg, -ENODEV);
return;
}
int rc;
spdk_bdev_unregister(bdev, cb_fn, cb_arg);
rc = spdk_bdev_unregister_by_name(bdev_name, &null_if, cb_fn, cb_arg);
if (rc != 0) {
cb_fn(cb_arg, rc);
}
}
static int

View File

@ -57,11 +57,11 @@ int bdev_null_create(struct spdk_bdev **bdev, const struct spdk_null_bdev_opts *
/**
* Delete null bdev.
*
* \param bdev Pointer to null bdev.
* \param bdev_name Name of null bdev.
* \param cb_fn Function to call after deletion.
* \param cb_arg Argument to pass to cb_fn.
*/
void bdev_null_delete(struct spdk_bdev *bdev, spdk_delete_null_complete cb_fn,
void bdev_null_delete(const char *bdev_name, spdk_delete_null_complete cb_fn,
void *cb_arg);
/**
* Resize null bdev.

View File

@ -183,7 +183,6 @@ rpc_bdev_null_delete(struct spdk_jsonrpc_request *request,
const struct spdk_json_val *params)
{
struct rpc_delete_null req = {NULL};
struct spdk_bdev *bdev;
if (spdk_json_decode_object(params, rpc_delete_null_decoders,
SPDK_COUNTOF(rpc_delete_null_decoders),
@ -193,13 +192,7 @@ rpc_bdev_null_delete(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;
}
bdev_null_delete(bdev, rpc_bdev_null_delete_cb, request);
bdev_null_delete(req.name, rpc_bdev_null_delete_cb, request);
free_rpc_delete_null(&req);

View File

@ -737,31 +737,30 @@ bdev_passthru_create_disk(const char *bdev_name, const char *vbdev_name)
}
void
bdev_passthru_delete_disk(struct spdk_bdev *bdev, spdk_bdev_unregister_cb cb_fn, void *cb_arg)
bdev_passthru_delete_disk(const char *bdev_name, spdk_bdev_unregister_cb cb_fn, void *cb_arg)
{
struct bdev_names *name;
int rc;
if (!bdev || bdev->module != &passthru_if) {
cb_fn(cb_arg, -ENODEV);
return;
}
/* Remove the association (vbdev, bdev) from g_bdev_names. This is required so that the
* vbdev does not get re-created if the same bdev is constructed at some other time,
* unless the underlying bdev was hot-removed.
*/
TAILQ_FOREACH(name, &g_bdev_names, link) {
if (strcmp(name->vbdev_name, bdev->name) == 0) {
TAILQ_REMOVE(&g_bdev_names, name, link);
free(name->bdev_name);
free(name->vbdev_name);
free(name);
break;
/* Some cleanup happens in the destruct callback. */
rc = spdk_bdev_unregister_by_name(bdev_name, &passthru_if, cb_fn, cb_arg);
if (rc == 0) {
/* Remove the association (vbdev, bdev) from g_bdev_names. This is required so that the
* vbdev does not get re-created if the same bdev is constructed at some other time,
* unless the underlying bdev was hot-removed.
*/
TAILQ_FOREACH(name, &g_bdev_names, link) {
if (strcmp(name->vbdev_name, bdev_name) == 0) {
TAILQ_REMOVE(&g_bdev_names, name, link);
free(name->bdev_name);
free(name->vbdev_name);
free(name);
break;
}
}
} else {
cb_fn(cb_arg, rc);
}
/* Additional cleanup happens in the destruct callback. */
spdk_bdev_unregister(bdev, cb_fn, cb_arg);
}
/* Because we specified this function in our pt bdev function table when we

View File

@ -51,11 +51,11 @@ int bdev_passthru_create_disk(const char *bdev_name, const char *vbdev_name);
/**
* Delete passthru bdev.
*
* \param bdev Pointer to pass through bdev.
* \param bdev_name Name of the pass through bdev.
* \param cb_fn Function to call after deletion.
* \param cb_arg Argument to pass to cb_fn.
*/
void bdev_passthru_delete_disk(struct spdk_bdev *bdev, spdk_bdev_unregister_cb cb_fn,
void bdev_passthru_delete_disk(const char *bdev_name, spdk_bdev_unregister_cb cb_fn,
void *cb_arg);
#endif /* SPDK_VBDEV_PASSTHRU_H */

View File

@ -124,7 +124,6 @@ rpc_bdev_passthru_delete(struct spdk_jsonrpc_request *request,
const struct spdk_json_val *params)
{
struct rpc_bdev_passthru_delete req = {NULL};
struct spdk_bdev *bdev;
if (spdk_json_decode_object(params, rpc_bdev_passthru_delete_decoders,
SPDK_COUNTOF(rpc_bdev_passthru_delete_decoders),
@ -134,13 +133,7 @@ rpc_bdev_passthru_delete(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;
}
bdev_passthru_delete_disk(bdev, rpc_bdev_passthru_delete_cb, request);
bdev_passthru_delete_disk(req.name, rpc_bdev_passthru_delete_cb, request);
cleanup:
free_rpc_bdev_passthru_delete(&req);

View File

@ -390,14 +390,14 @@ create_pmem_disk(const char *pmem_file, const char *name, struct spdk_bdev **bde
}
void
delete_pmem_disk(struct spdk_bdev *bdev, spdk_delete_pmem_complete cb_fn, void *cb_arg)
delete_pmem_disk(const char *name, spdk_delete_pmem_complete cb_fn, void *cb_arg)
{
if (!bdev || bdev->module != &pmem_if) {
cb_fn(cb_arg, -ENODEV);
return;
}
int rc;
spdk_bdev_unregister(bdev, cb_fn, cb_arg);
rc = spdk_bdev_unregister_by_name(name, &pmem_if, cb_fn, cb_arg);
if (rc != 0) {
cb_fn(cb_arg, rc);
}
}
static int

View File

@ -54,11 +54,11 @@ int create_pmem_disk(const char *pmem_file, const char *name, struct spdk_bdev *
/**
* Delete pmem bdev.
*
* \param bdev Pointer to pmem bdev.
* \param name Name of pmem bdev.
* \param cb_fn Function to call after deletion.
* \param cb_arg Argument to pass to cb_fn.
*/
void delete_pmem_disk(struct spdk_bdev *bdev, spdk_delete_pmem_complete cb_fn,
void delete_pmem_disk(const char *name, spdk_delete_pmem_complete cb_fn,
void *cb_arg);
#endif /* SPDK_BDEV_PMEM_H */

View File

@ -120,7 +120,6 @@ rpc_bdev_pmem_delete(struct spdk_jsonrpc_request *request,
const struct spdk_json_val *params)
{
struct rpc_delete_pmem req = {NULL};
struct spdk_bdev *bdev;
if (spdk_json_decode_object(params, rpc_delete_pmem_decoders,
SPDK_COUNTOF(rpc_delete_pmem_decoders),
@ -128,16 +127,10 @@ rpc_bdev_pmem_delete(struct spdk_jsonrpc_request *request,
SPDK_DEBUGLOG(bdev_pmem, "spdk_json_decode_object failed\n");
spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INTERNAL_ERROR,
"spdk_json_decode_object failed");
}
bdev = spdk_bdev_get_by_name(req.name);
if (bdev == NULL) {
SPDK_DEBUGLOG(bdev_pmem, "bdev '%s' does not exist\n", req.name);
spdk_jsonrpc_send_error_response(request, -ENODEV, spdk_strerror(ENODEV));
goto cleanup;
}
delete_pmem_disk(bdev, _rpc_bdev_pmem_delete_cb, request);
delete_pmem_disk(req.name, _rpc_bdev_pmem_delete_cb, request);
cleanup:
free_rpc_delete_pmem(&req);

View File

@ -1277,14 +1277,14 @@ bdev_rbd_create(struct spdk_bdev **bdev, const char *name, const char *user_id,
}
void
bdev_rbd_delete(struct spdk_bdev *bdev, spdk_delete_rbd_complete cb_fn, void *cb_arg)
bdev_rbd_delete(const char *name, spdk_delete_rbd_complete cb_fn, void *cb_arg)
{
if (!bdev || bdev->module != &rbd_if) {
cb_fn(cb_arg, -ENODEV);
return;
}
int rc;
spdk_bdev_unregister(bdev, cb_fn, cb_arg);
rc = spdk_bdev_unregister_by_name(name, &rbd_if, cb_fn, cb_arg);
if (rc != 0) {
cb_fn(cb_arg, rc);
}
}
int

View File

@ -59,11 +59,11 @@ int bdev_rbd_create(struct spdk_bdev **bdev, const char *name, const char *user_
/**
* Delete rbd bdev.
*
* \param bdev Pointer to rbd bdev.
* \param name Name of rbd bdev.
* \param cb_fn Function to call after deletion.
* \param cb_arg Argument to pass to cb_fn.
*/
void bdev_rbd_delete(struct spdk_bdev *bdev, spdk_delete_rbd_complete cb_fn,
void bdev_rbd_delete(const char *name, spdk_delete_rbd_complete cb_fn,
void *cb_arg);
/**

View File

@ -192,7 +192,6 @@ rpc_bdev_rbd_delete(struct spdk_jsonrpc_request *request,
const struct spdk_json_val *params)
{
struct rpc_bdev_rbd_delete req = {NULL};
struct spdk_bdev *bdev;
if (spdk_json_decode_object(params, rpc_bdev_rbd_delete_decoders,
SPDK_COUNTOF(rpc_bdev_rbd_delete_decoders),
@ -202,13 +201,7 @@ rpc_bdev_rbd_delete(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;
}
bdev_rbd_delete(bdev, _rpc_bdev_rbd_delete_cb, request);
bdev_rbd_delete(req.name, _rpc_bdev_rbd_delete_cb, request);
cleanup:
free_rpc_bdev_rbd_delete(&req);

View File

@ -551,14 +551,10 @@ uring_bdev_unregister_cb(void *arg, int bdeverrno)
}
void
delete_uring_bdev(struct spdk_bdev *bdev, spdk_delete_uring_complete cb_fn, void *cb_arg)
delete_uring_bdev(const char *name, spdk_delete_uring_complete cb_fn, void *cb_arg)
{
struct delete_uring_bdev_ctx *ctx;
if (!bdev || bdev->module != &uring_if) {
cb_fn(cb_arg, -ENODEV);
return;
}
int rc;
ctx = calloc(1, sizeof(*ctx));
if (ctx == NULL) {
@ -568,7 +564,10 @@ delete_uring_bdev(struct spdk_bdev *bdev, spdk_delete_uring_complete cb_fn, void
ctx->cb_fn = cb_fn;
ctx->cb_arg = cb_arg;
spdk_bdev_unregister(bdev, uring_bdev_unregister_cb, ctx);
rc = spdk_bdev_unregister_by_name(name, &uring_if, uring_bdev_unregister_cb, ctx);
if (rc != 0) {
uring_bdev_unregister_cb(ctx, rc);
}
}
static int

View File

@ -45,6 +45,6 @@ typedef void (*spdk_delete_uring_complete)(void *cb_arg, int bdeverrno);
struct spdk_bdev *create_uring_bdev(const char *name, const char *filename, uint32_t block_size);
void delete_uring_bdev(struct spdk_bdev *bdev, spdk_delete_uring_complete cb_fn, void *cb_arg);
void delete_uring_bdev(const char *name, spdk_delete_uring_complete cb_fn, void *cb_arg);
#endif /* SPDK_BDEV_URING_H */

View File

@ -128,7 +128,6 @@ rpc_bdev_uring_delete(struct spdk_jsonrpc_request *request,
const struct spdk_json_val *params)
{
struct rpc_delete_uring req = {NULL};
struct spdk_bdev *bdev;
if (spdk_json_decode_object(params, rpc_delete_uring_decoders,
SPDK_COUNTOF(rpc_delete_uring_decoders),
@ -138,13 +137,7 @@ rpc_bdev_uring_delete(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;
}
delete_uring_bdev(bdev, _rpc_bdev_uring_delete_cb, request);
delete_uring_bdev(req.name, _rpc_bdev_uring_delete_cb, request);
cleanup:
free_rpc_delete_uring(&req);

View File

@ -300,20 +300,7 @@ bdev_virtio_disk_destruct(void *ctx)
int
bdev_virtio_blk_dev_remove(const char *name, bdev_virtio_remove_cb cb_fn, void *cb_arg)
{
struct spdk_bdev *bdev;
bdev = spdk_bdev_get_by_name(name);
if (bdev == NULL) {
return -ENODEV;
}
if (bdev->module != &virtio_blk_if) {
return -ENODEV;
}
spdk_bdev_unregister(bdev, cb_fn, cb_arg);
return 0;
return spdk_bdev_unregister_by_name(name, &virtio_blk_if, cb_fn, cb_arg);
}
static int

View File

@ -913,22 +913,19 @@ void
vbdev_zone_block_delete(const char *name, spdk_bdev_unregister_cb cb_fn, void *cb_arg)
{
struct bdev_zone_block_config *name_node;
struct spdk_bdev *bdev = NULL;
int rc;
bdev = spdk_bdev_get_by_name(name);
if (!bdev || bdev->module != &bdev_zoned_if) {
cb_fn(cb_arg, -ENODEV);
return;
}
TAILQ_FOREACH(name_node, &g_bdev_configs, link) {
if (strcmp(name_node->vbdev_name, bdev->name) == 0) {
zone_block_remove_config(name_node);
break;
rc = spdk_bdev_unregister_by_name(name, &bdev_zoned_if, cb_fn, cb_arg);
if (rc == 0) {
TAILQ_FOREACH(name_node, &g_bdev_configs, link) {
if (strcmp(name_node->vbdev_name, name) == 0) {
zone_block_remove_config(name_node);
break;
}
}
} else {
cb_fn(cb_arg, rc);
}
spdk_bdev_unregister(bdev, cb_fn, cb_arg);
}
static void

View File

@ -253,6 +253,9 @@ DEFINE_STUB(spdk_bdev_get_buf_align, size_t, (const struct spdk_bdev *bdev), 64)
DEFINE_STUB(spdk_bdev_get_io_channel, struct spdk_io_channel *, (struct spdk_bdev_desc *desc), 0);
DEFINE_STUB_V(spdk_bdev_unregister, (struct spdk_bdev *bdev, spdk_bdev_unregister_cb cb_fn,
void *cb_arg));
DEFINE_STUB(spdk_bdev_unregister_by_name, int, (const char *bdev_name,
struct spdk_bdev_module *module,
spdk_bdev_unregister_cb cb_fn, void *cb_arg), 0);
DEFINE_STUB(spdk_bdev_open_ext, int, (const char *bdev_name, bool write,
spdk_bdev_event_cb_t event_cb,
void *event_ctx, struct spdk_bdev_desc **_desc), 0);

View File

@ -268,9 +268,11 @@ spdk_bdev_register(struct spdk_bdev *bdev)
return 0;
}
void
spdk_bdev_unregister(struct spdk_bdev *bdev, spdk_bdev_unregister_cb cb_fn, void *cb_arg)
int
spdk_bdev_unregister_by_name(const char *name, struct spdk_bdev_module *module,
spdk_bdev_unregister_cb cb_fn, void *cb_arg)
{
return 0;
}
int

View File

@ -161,6 +161,22 @@ spdk_bdev_unregister(struct spdk_bdev *bdev, spdk_bdev_unregister_cb cb_fn, void
}
}
int
spdk_bdev_unregister_by_name(const char *bdev_name, struct spdk_bdev_module *module,
spdk_bdev_unregister_cb cb_fn, void *cb_arg)
{
struct spdk_bdev *bdev;
CU_ASSERT(module == &bdev_zoned_if);
bdev = spdk_bdev_get_by_name(bdev_name);
SPDK_CU_ASSERT_FATAL(bdev != NULL);
spdk_bdev_unregister(bdev, cb_fn, cb_arg);
return 0;
}
int spdk_json_write_named_uint64(struct spdk_json_write_ctx *w, const char *name, uint64_t val)
{
struct rpc_construct_zone_block *req = g_rpc_req;