Commit 6a72c19e authored by Shuhei Matsumoto's avatar Shuhei Matsumoto Committed by Tomasz Zawadzki
Browse files

blob/bdev: Add an API spdk_bdev_create_bs_dev_ext()



spdk_bdev_open_ext() requires the caller to use bdev_event_cb_t
and bdev_event_cb_t is more extensible than bdev_remove_cb_t.
Hence use bdev_event_t as an argument.

spdk_bdev_open_ext() calls spdk_bdev_get_by_name() inside and
spdk_bdev_create_bs_dev_ext() calls spdk_bdev_open_ext() inside.
The caller needs to know if the spdk_bdev_get_by_name() succeeded.
Hence spdk_bdev_create_bs_dev_ext() returns return code by return
value and returns the created bs_dev by double pointer.

Signed-off-by: default avatarShuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
Change-Id: I1c225bfb66db036439c69c459f39c86684d8a540
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/4692


Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: default avatarJim Harris <james.r.harris@intel.com>
Reviewed-by: default avatarTomasz Zawadzki <tomasz.zawadzki@intel.com>
Reviewed-by: default avatarAleksey Marchuk <alexeymar@mellanox.com>
parent 778e21aa
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -16,6 +16,11 @@ A new `spdk_bdev_part_base_construct_ext` function has been added and the
of bdev structure to avoid a race condition that can happen when the bdev is being
removed between a call to get its structure based on a name and actually openning it.

### blobstore

A new `spdk_bdev_create_bs_dev_ext` function has been added and `spdk_bdev_create_bs_dev_from_desc`
function has been deprecated.

### dpdk

Updated DPDK submodule to DPDK 20.08.
+15 −3
Original line number Diff line number Diff line
@@ -50,8 +50,7 @@ struct spdk_bdev;
struct spdk_bdev_module;

/**
 * Create a blobstore block device from a bdev. (deprecated, please use spdk_bdev_create_bs_dev_from_desc,
 * together with spdk_bdev_open_ext).
 * Create a blobstore block device from a bdev (deprecated, please use spdk_bdev_create_bs_dev_ext).
 *
 * \param bdev Bdev to use.
 * \param remove_cb Called when the block device is removed.
@@ -63,7 +62,7 @@ struct spdk_bs_dev *spdk_bdev_create_bs_dev(struct spdk_bdev *bdev, spdk_bdev_re
		void *remove_ctx);

/**
 * Create a blobstore block device from the descriptor of a bdev.
 * Create a blobstore block device from the descriptor of a bdev (deprecated, please use spdk_bdev_create_bs_dev_ext).
 *
 * \param desc Descriptor of a bdev. spdk_bdev_open_ext() is recommended to get the desc.
 *
@@ -71,6 +70,19 @@ struct spdk_bs_dev *spdk_bdev_create_bs_dev(struct spdk_bdev *bdev, spdk_bdev_re
 */
struct spdk_bs_dev *spdk_bdev_create_bs_dev_from_desc(struct spdk_bdev_desc *desc);

/**
 * Create a blobstore block device from a bdev.
 *
 * \param bdev_name Name of the bdev to use.
 * \param event_cb Called when the bdev triggers asynchronous event.
 * \param event_ctx Argument passed to function event_cb.
 * \param bs_dev Output parameter for a pointer to the blobstore block device.
 *
 * \return 0 if operation is successful, or suitable errno value otherwise.
 */
int spdk_bdev_create_bs_dev_ext(const char *bdev_name, spdk_bdev_event_cb_t event_cb,
				void *event_ctx, struct spdk_bs_dev **bs_dev);

/**
 * Claim the bdev module for the given blobstore.
 *
+1 −1
Original line number Diff line number Diff line
@@ -35,7 +35,7 @@ SPDK_ROOT_DIR := $(abspath $(CURDIR)/../../..)
include $(SPDK_ROOT_DIR)/mk/spdk.common.mk

SO_VER := 3
SO_MINOR := 0
SO_MINOR := 1

C_SRCS = blob_bdev.c
LIBNAME = blob_bdev
+29 −0
Original line number Diff line number Diff line
@@ -383,3 +383,32 @@ spdk_bdev_create_bs_dev_from_desc(struct spdk_bdev_desc *desc)

	return &b->bs_dev;
}


int
spdk_bdev_create_bs_dev_ext(const char *bdev_name, spdk_bdev_event_cb_t event_cb,
			    void *event_ctx, struct spdk_bs_dev **_bs_dev)
{
	struct blob_bdev *b;
	struct spdk_bdev_desc *desc;
	int rc;

	b = calloc(1, sizeof(*b));

	if (b == NULL) {
		SPDK_ERRLOG("could not allocate blob_bdev\n");
		return -ENOMEM;
	}

	rc = spdk_bdev_open_ext(bdev_name, true, event_cb, event_ctx, &desc);
	if (rc != 0) {
		free(b);
		return rc;
	}

	blob_bdev_init(b, desc);

	*_bs_dev = &b->bs_dev;

	return 0;
}
+1 −0
Original line number Diff line number Diff line
@@ -4,6 +4,7 @@
	# public functions
	spdk_bdev_create_bs_dev;
	spdk_bdev_create_bs_dev_from_desc;
	spdk_bdev_create_bs_dev_ext;
	spdk_bs_bdev_claim;

	local: *;