Commit df788487 authored by Krzysztof Karas's avatar Krzysztof Karas Committed by Jim Harris
Browse files

bdev/delay: generate UUID from parent bdev UUID



If no UUID is provided via RPC, use base bdev UUID
to generate new UUID for delay bdev.

Change-Id: Ie5ebedc62edad103558cc1d68b85853fe4e68145
Signed-off-by: default avatarKrzysztof Karas <krzysztof.karas@intel.com>
Signed-off-by: default avatarJim Harris <james.r.harris@intel.com>
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/17124


Community-CI: Mellanox Build Bot
Reviewed-by: default avatarAleksey Marchuk <alexeymar@nvidia.com>
Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
parent 74efab1e
Loading
Loading
Loading
Loading
+19 −2
Original line number Diff line number Diff line
@@ -17,6 +17,8 @@
#include "spdk/bdev_module.h"
#include "spdk/log.h"

/* This namespace UUID was generated using uuid_generate() method. */
#define BDEV_DELAY_NAMESPACE_UUID "4009b574-6430-4f1b-bc40-ace811091027"

static int vbdev_delay_init(void);
static int vbdev_delay_get_ctx_size(void);
@@ -766,8 +768,11 @@ vbdev_delay_register(const char *bdev_name)
	struct vbdev_delay *delay_node;
	struct spdk_bdev *bdev;
	uint64_t ticks_mhz = spdk_get_ticks_hz() / SPDK_SEC_TO_USEC;
	struct spdk_uuid ns_uuid;
	int rc = 0;

	spdk_uuid_parse(&ns_uuid, BDEV_DELAY_NAMESPACE_UUID);

	/* Check our list of names from config versus this bdev and if
	 * there's a match, create the delay_node & bdev accordingly.
	 */
@@ -791,8 +796,6 @@ vbdev_delay_register(const char *bdev_name)
		}
		delay_node->delay_bdev.product_name = "delay";

		spdk_uuid_copy(&delay_node->delay_bdev.uuid, &assoc->uuid);

		/* The base bdev that we're attaching to. */
		rc = spdk_bdev_open_ext(bdev_name, true, vbdev_delay_base_bdev_event_cb,
					NULL, &delay_node->base_desc);
@@ -824,6 +827,20 @@ vbdev_delay_register(const char *bdev_name)
		delay_node->average_write_latency_ticks = ticks_mhz * assoc->avg_write_latency;
		delay_node->p99_write_latency_ticks = ticks_mhz * assoc->p99_write_latency;

		if (spdk_mem_all_zero(&assoc->uuid, sizeof(assoc->uuid))) {
			/* Generate UUID based on namespace UUID + base bdev UUID */
			rc = spdk_uuid_generate_sha1(&delay_node->delay_bdev.uuid, &ns_uuid,
						     (const char *)&bdev->uuid, sizeof(struct spdk_uuid));
			if (rc) {
				spdk_bdev_close(delay_node->base_desc);
				free(delay_node->delay_bdev.name);
				free(delay_node);
				break;
			}
		} else {
			spdk_uuid_copy(&delay_node->delay_bdev.uuid, &assoc->uuid);
		}

		spdk_io_device_register(delay_node, delay_bdev_ch_create_cb, delay_bdev_ch_destroy_cb,
					sizeof(struct delay_io_channel),
					assoc->vbdev_name);