Commit 4573e4cc authored by Shuhei Matsumoto's avatar Shuhei Matsumoto Committed by Tomasz Zawadzki
Browse files

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: default avatarShuhei 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: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: default avatarBen Walker <benjamin.walker@intel.com>
Reviewed-by: default avatarAleksey Marchuk <alexeymar@mellanox.com>
Reviewed-by: default avatarJim Harris <james.r.harris@intel.com>
parent d3e394ae
Loading
Loading
Loading
Loading
+6 −7
Original line number Diff line number Diff line
@@ -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
+1 −1
Original line number Diff line number Diff line
@@ -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 */
+1 −8
Original line number Diff line number Diff line
@@ -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);
+16 −17
Original line number Diff line number Diff line
@@ -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;
	}

	/* 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) {
			if (strcmp(name->opts->vbdev_name, bdev_name) == 0) {
				vbdev_crypto_delete_name(name);
				break;
			}
		}

	/* Additional cleanup happens in the destruct callback. */
	spdk_bdev_unregister(bdev, cb_fn, cb_arg);
	} else {
		cb_fn(cb_arg, rc);
	}
}

/* Because we specified this function in our crypto bdev function table when we
+2 −2
Original line number Diff line number Diff line
@@ -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);

/**
Loading