Commit 33e0e723 authored by Yoav Cohen's avatar Yoav Cohen Committed by Tomasz Zawadzki
Browse files

bdev/uring: Add uuid support for create_uring_bdev



1) Add struct bdev_uring_opts.
2) Add uuid support to create_uring_bdev.

Change-Id: I5b279f45adcc88b96ef6f685cf5364583f3a9cca
Signed-off-by: default avatarYoav Cohen <yoav@nvidia.com>
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/21308


Reviewed-by: default avatarAleksey Marchuk <alexeymar@nvidia.com>
Community-CI: Mellanox Build Bot
Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: default avatarJim Harris <jim.harris@samsung.com>
parent 93211307
Loading
Loading
Loading
Loading
+13 −5
Original line number Diff line number Diff line
@@ -677,6 +677,7 @@ static void
bdev_uring_write_json_config(struct spdk_bdev *bdev, struct spdk_json_write_ctx *w)
{
	struct bdev_uring *uring = bdev->ctxt;
	char uuid_str[SPDK_UUID_STRING_LEN];

	spdk_json_write_object_begin(w);

@@ -686,6 +687,8 @@ bdev_uring_write_json_config(struct spdk_bdev *bdev, struct spdk_json_write_ctx
	spdk_json_write_named_string(w, "name", bdev->name);
	spdk_json_write_named_uint32(w, "block_size", bdev->blocklen);
	spdk_json_write_named_string(w, "filename", uring->filename);
	spdk_uuid_fmt_lower(uuid_str, sizeof(uuid_str), &bdev->uuid);
	spdk_json_write_named_string(w, "uuid", uuid_str);
	spdk_json_write_object_end(w);

	spdk_json_write_object_end(w);
@@ -738,12 +741,13 @@ bdev_uring_group_destroy_cb(void *io_device, void *ctx_buf)
}

struct spdk_bdev *
create_uring_bdev(const char *name, const char *filename, uint32_t block_size)
create_uring_bdev(const struct bdev_uring_opts *opts)
{
	struct bdev_uring *uring;
	uint32_t detected_block_size;
	uint64_t bdev_size;
	int rc;
	uint32_t block_size = opts->block_size;

	uring = calloc(1, sizeof(*uring));
	if (!uring) {
@@ -751,19 +755,19 @@ create_uring_bdev(const char *name, const char *filename, uint32_t block_size)
		return NULL;
	}

	uring->filename = strdup(filename);
	uring->filename = strdup(opts->filename);
	if (!uring->filename) {
		goto error_return;
	}

	if (bdev_uring_open(uring)) {
		SPDK_ERRLOG("Unable to open file %s. fd: %d errno: %d\n", filename, uring->fd, errno);
		SPDK_ERRLOG("Unable to open file %s. fd: %d errno: %d\n", opts->filename, uring->fd, errno);
		goto error_return;
	}

	bdev_size = spdk_fd_get_size(uring->fd);

	uring->bdev.name = strdup(name);
	uring->bdev.name = strdup(opts->name);
	if (!uring->bdev.name) {
		goto error_return;
	}
@@ -806,7 +810,7 @@ create_uring_bdev(const char *name, const char *filename, uint32_t block_size)
	uring->bdev.blocklen = block_size;
	uring->bdev.required_alignment = spdk_u32log2(block_size);

	rc = bdev_uring_check_zoned_support(uring, name, filename);
	rc = bdev_uring_check_zoned_support(uring, opts->name, opts->filename);
	if (rc) {
		goto error_return;
	}
@@ -822,6 +826,10 @@ create_uring_bdev(const char *name, const char *filename, uint32_t block_size)

	uring->bdev.fn_table = &uring_fn_table;

	if (!spdk_mem_all_zero(&opts->uuid, sizeof(opts->uuid))) {
		spdk_uuid_copy(&uring->bdev.uuid, &opts->uuid);
	}

	spdk_io_device_register(uring, bdev_uring_create_cb, bdev_uring_destroy_cb,
				sizeof(struct bdev_uring_io_channel),
				uring->bdev.name);
+8 −1
Original line number Diff line number Diff line
@@ -15,7 +15,14 @@

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);
struct bdev_uring_opts {
	const char *name;
	const char *filename;
	uint32_t block_size;
	struct spdk_uuid uuid;
};

struct spdk_bdev *create_uring_bdev(const struct bdev_uring_opts *opts);

void delete_uring_bdev(const char *name, spdk_delete_uring_complete cb_fn, void *cb_arg);

+6 −1
Original line number Diff line number Diff line
@@ -41,6 +41,7 @@ rpc_bdev_uring_create(struct spdk_jsonrpc_request *request,
	struct rpc_create_uring req = {};
	struct spdk_json_write_ctx *w;
	struct spdk_bdev *bdev;
	struct bdev_uring_opts opts = {};

	if (spdk_json_decode_object(params, rpc_create_uring_decoders,
				    SPDK_COUNTOF(rpc_create_uring_decoders),
@@ -51,7 +52,11 @@ rpc_bdev_uring_create(struct spdk_jsonrpc_request *request,
		goto cleanup;
	}

	bdev = create_uring_bdev(req.name, req.filename, req.block_size);
	opts.block_size = req.block_size;
	opts.filename = req.filename;
	opts.name = req.name;

	bdev = create_uring_bdev(&opts);
	if (!bdev) {
		SPDK_ERRLOG("Unable to create URING bdev from file %s\n", req.filename);
		spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INTERNAL_ERROR,