util/uuid: add API to test/set null uuid
Refactor the code to use these new functions. Change-Id: I21ee7e9a96f30fbd60106add5e8b071e86bf93c9 Signed-off-by: Artur Paszkiewicz <artur.paszkiewicz@intel.com>
This commit is contained in:
parent
52726c9b6e
commit
882ecb55a8
@ -67,6 +67,11 @@ New API `spdk_bdev_part_construct_ext` is added and allows the bdev's UUID to be
|
|||||||
the existing worker and namespace association logic to access every namespace from each worker.
|
the existing worker and namespace association logic to access every namespace from each worker.
|
||||||
This replicates behavior of bdevperf application when `-C` option is provided.
|
This replicates behavior of bdevperf application when `-C` option is provided.
|
||||||
|
|
||||||
|
### util
|
||||||
|
|
||||||
|
New APIs `spdk_uuid_is_null` and `spdk_uuid_set_null` were added to compare and
|
||||||
|
set UUID to NULL value.
|
||||||
|
|
||||||
## v23.01
|
## v23.01
|
||||||
|
|
||||||
### accel
|
### accel
|
||||||
|
@ -86,6 +86,22 @@ int spdk_uuid_generate_sha1(struct spdk_uuid *uuid, struct spdk_uuid *ns_uuid, c
|
|||||||
*/
|
*/
|
||||||
void spdk_uuid_copy(struct spdk_uuid *dst, const struct spdk_uuid *src);
|
void spdk_uuid_copy(struct spdk_uuid *dst, const struct spdk_uuid *src);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Compare the UUID to the NULL value (all bits equal to zero).
|
||||||
|
*
|
||||||
|
* \param uuid The UUID to test.
|
||||||
|
*
|
||||||
|
* \return true if uuid is equal to the NULL value, false if not.
|
||||||
|
*/
|
||||||
|
bool spdk_uuid_is_null(const struct spdk_uuid *uuid);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the value of UUID to the NULL value.
|
||||||
|
*
|
||||||
|
* \param uuid The UUID to set.
|
||||||
|
*/
|
||||||
|
void spdk_uuid_set_null(struct spdk_uuid *uuid);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -7427,7 +7427,7 @@ bdev_register(struct spdk_bdev *bdev)
|
|||||||
|
|
||||||
/* UUID may be specified by the user or defined by bdev itself.
|
/* UUID may be specified by the user or defined by bdev itself.
|
||||||
* Otherwise it will be generated here, so this field will never be empty. */
|
* Otherwise it will be generated here, so this field will never be empty. */
|
||||||
if (spdk_mem_all_zero(&bdev->uuid, sizeof(bdev->uuid))) {
|
if (spdk_uuid_is_null(&bdev->uuid)) {
|
||||||
spdk_uuid_generate(&bdev->uuid);
|
spdk_uuid_generate(&bdev->uuid);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -255,11 +255,11 @@ load_next_lvol(void *cb_arg, struct spdk_blob *blob, int lvolerrno)
|
|||||||
if (rc != 0 || value_len != SPDK_UUID_STRING_LEN || attr[SPDK_UUID_STRING_LEN - 1] != '\0' ||
|
if (rc != 0 || value_len != SPDK_UUID_STRING_LEN || attr[SPDK_UUID_STRING_LEN - 1] != '\0' ||
|
||||||
spdk_uuid_parse(&lvol->uuid, attr) != 0) {
|
spdk_uuid_parse(&lvol->uuid, attr) != 0) {
|
||||||
SPDK_INFOLOG(lvol, "Missing or corrupt lvol uuid\n");
|
SPDK_INFOLOG(lvol, "Missing or corrupt lvol uuid\n");
|
||||||
memset(&lvol->uuid, 0, sizeof(lvol->uuid));
|
spdk_uuid_set_null(&lvol->uuid);
|
||||||
}
|
}
|
||||||
spdk_uuid_fmt_lower(lvol->uuid_str, sizeof(lvol->uuid_str), &lvol->uuid);
|
spdk_uuid_fmt_lower(lvol->uuid_str, sizeof(lvol->uuid_str), &lvol->uuid);
|
||||||
|
|
||||||
if (!spdk_mem_all_zero(&lvol->uuid, sizeof(lvol->uuid))) {
|
if (!spdk_uuid_is_null(&lvol->uuid)) {
|
||||||
snprintf(lvol->unique_id, sizeof(lvol->unique_id), "%s", lvol->uuid_str);
|
snprintf(lvol->unique_id, sizeof(lvol->unique_id), "%s", lvol->uuid_str);
|
||||||
} else {
|
} else {
|
||||||
spdk_uuid_fmt_lower(lvol->unique_id, sizeof(lvol->unique_id), &lvol->lvol_store->uuid);
|
spdk_uuid_fmt_lower(lvol->unique_id, sizeof(lvol->unique_id), &lvol->lvol_store->uuid);
|
||||||
|
@ -544,7 +544,7 @@ nvmf_write_subsystem_config_json(struct spdk_json_write_ctx *w,
|
|||||||
spdk_json_write_named_string_fmt(w, "eui64", "%016"PRIX64, from_be64(&ns_opts.eui64));
|
spdk_json_write_named_string_fmt(w, "eui64", "%016"PRIX64, from_be64(&ns_opts.eui64));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!spdk_mem_all_zero(&ns_opts.uuid, sizeof(ns_opts.uuid))) {
|
if (!spdk_uuid_is_null(&ns_opts.uuid)) {
|
||||||
spdk_uuid_fmt_lower(uuid_str, sizeof(uuid_str), &ns_opts.uuid);
|
spdk_uuid_fmt_lower(uuid_str, sizeof(uuid_str), &ns_opts.uuid);
|
||||||
spdk_json_write_named_string(w, "uuid", uuid_str);
|
spdk_json_write_named_string(w, "uuid", uuid_str);
|
||||||
}
|
}
|
||||||
|
@ -259,7 +259,7 @@ dump_nvmf_subsystem(struct spdk_json_write_ctx *w, struct spdk_nvmf_subsystem *s
|
|||||||
json_write_hex_str(w, ns_opts.eui64, sizeof(ns_opts.eui64));
|
json_write_hex_str(w, ns_opts.eui64, sizeof(ns_opts.eui64));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!spdk_mem_all_zero(&ns_opts.uuid, sizeof(ns_opts.uuid))) {
|
if (!spdk_uuid_is_null(&ns_opts.uuid)) {
|
||||||
char uuid_str[SPDK_UUID_STRING_LEN];
|
char uuid_str[SPDK_UUID_STRING_LEN];
|
||||||
|
|
||||||
spdk_uuid_fmt_lower(uuid_str, sizeof(uuid_str), &ns_opts.uuid);
|
spdk_uuid_fmt_lower(uuid_str, sizeof(uuid_str), &ns_opts.uuid);
|
||||||
@ -1221,7 +1221,7 @@ nvmf_rpc_ns_paused(struct spdk_nvmf_subsystem *subsystem,
|
|||||||
SPDK_STATIC_ASSERT(sizeof(ns_opts.eui64) == sizeof(ctx->ns_params.eui64), "size mismatch");
|
SPDK_STATIC_ASSERT(sizeof(ns_opts.eui64) == sizeof(ctx->ns_params.eui64), "size mismatch");
|
||||||
memcpy(ns_opts.eui64, ctx->ns_params.eui64, sizeof(ns_opts.eui64));
|
memcpy(ns_opts.eui64, ctx->ns_params.eui64, sizeof(ns_opts.eui64));
|
||||||
|
|
||||||
if (!spdk_mem_all_zero(&ctx->ns_params.uuid, sizeof(ctx->ns_params.uuid))) {
|
if (!spdk_uuid_is_null(&ctx->ns_params.uuid)) {
|
||||||
ns_opts.uuid = ctx->ns_params.uuid;
|
ns_opts.uuid = ctx->ns_params.uuid;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1529,7 +1529,7 @@ spdk_nvmf_ns_opts_get_defaults(struct spdk_nvmf_ns_opts *opts, size_t opts_size)
|
|||||||
memset(opts->eui64, 0, sizeof(opts->eui64));
|
memset(opts->eui64, 0, sizeof(opts->eui64));
|
||||||
}
|
}
|
||||||
if (FIELD_OK(uuid)) {
|
if (FIELD_OK(uuid)) {
|
||||||
memset(&opts->uuid, 0, sizeof(opts->uuid));
|
spdk_uuid_set_null(&opts->uuid);
|
||||||
}
|
}
|
||||||
SET_FIELD(anagrpid, 0);
|
SET_FIELD(anagrpid, 0);
|
||||||
|
|
||||||
@ -1558,7 +1558,7 @@ nvmf_ns_opts_copy(struct spdk_nvmf_ns_opts *opts,
|
|||||||
memcpy(opts->eui64, user_opts->eui64, sizeof(opts->eui64));
|
memcpy(opts->eui64, user_opts->eui64, sizeof(opts->eui64));
|
||||||
}
|
}
|
||||||
if (FIELD_OK(uuid)) {
|
if (FIELD_OK(uuid)) {
|
||||||
memcpy(&opts->uuid, &user_opts->uuid, sizeof(opts->uuid));
|
spdk_uuid_copy(&opts->uuid, &user_opts->uuid);
|
||||||
}
|
}
|
||||||
SET_FIELD(anagrpid);
|
SET_FIELD(anagrpid);
|
||||||
|
|
||||||
@ -1686,7 +1686,7 @@ spdk_nvmf_subsystem_add_ns_ext(struct spdk_nvmf_subsystem *subsystem, const char
|
|||||||
/* Cache the zcopy capability of the bdev device */
|
/* Cache the zcopy capability of the bdev device */
|
||||||
ns->zcopy = spdk_bdev_io_type_supported(ns->bdev, SPDK_BDEV_IO_TYPE_ZCOPY);
|
ns->zcopy = spdk_bdev_io_type_supported(ns->bdev, SPDK_BDEV_IO_TYPE_ZCOPY);
|
||||||
|
|
||||||
if (spdk_mem_all_zero(&opts.uuid, sizeof(opts.uuid))) {
|
if (spdk_uuid_is_null(&opts.uuid)) {
|
||||||
opts.uuid = *spdk_bdev_get_uuid(ns->bdev);
|
opts.uuid = *spdk_bdev_get_uuid(ns->bdev);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -621,7 +621,7 @@ spdk_reduce_vol_init(struct spdk_reduce_vol_params *params,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (spdk_mem_all_zero(¶ms->uuid, sizeof(params->uuid))) {
|
if (spdk_uuid_is_null(¶ms->uuid)) {
|
||||||
spdk_uuid_generate(¶ms->uuid);
|
spdk_uuid_generate(¶ms->uuid);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -155,6 +155,8 @@
|
|||||||
spdk_uuid_generate;
|
spdk_uuid_generate;
|
||||||
spdk_uuid_generate_sha1;
|
spdk_uuid_generate_sha1;
|
||||||
spdk_uuid_copy;
|
spdk_uuid_copy;
|
||||||
|
spdk_uuid_is_null;
|
||||||
|
spdk_uuid_set_null;
|
||||||
|
|
||||||
# public functions in fd_group.h
|
# public functions in fd_group.h
|
||||||
spdk_fd_group_create;
|
spdk_fd_group_create;
|
||||||
|
@ -52,6 +52,18 @@ spdk_uuid_copy(struct spdk_uuid *dst, const struct spdk_uuid *src)
|
|||||||
uuid_copy((void *)dst, (void *)src);
|
uuid_copy((void *)dst, (void *)src);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
spdk_uuid_is_null(const struct spdk_uuid *uuid)
|
||||||
|
{
|
||||||
|
return uuid_is_null((void *)uuid);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
spdk_uuid_set_null(struct spdk_uuid *uuid)
|
||||||
|
{
|
||||||
|
uuid_clear((void *)uuid);
|
||||||
|
}
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
#include <uuid.h>
|
#include <uuid.h>
|
||||||
@ -108,6 +120,18 @@ spdk_uuid_copy(struct spdk_uuid *dst, const struct spdk_uuid *src)
|
|||||||
memcpy(dst, src, sizeof(*dst));
|
memcpy(dst, src, sizeof(*dst));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
spdk_uuid_is_null(const struct spdk_uuid *uuid)
|
||||||
|
{
|
||||||
|
return uuid_is_nil((const uuid_t *)uuid, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
spdk_uuid_set_null(struct spdk_uuid *uuid)
|
||||||
|
{
|
||||||
|
uuid_create_nil((uuid_t *)uuid, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
int
|
int
|
||||||
|
@ -93,7 +93,7 @@ rpc_bdev_ftl_create(struct spdk_jsonrpc_request *request,
|
|||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (spdk_mem_all_zero(&conf.uuid, sizeof(conf.uuid))) {
|
if (spdk_uuid_is_null(&conf.uuid)) {
|
||||||
conf.mode |= SPDK_FTL_MODE_CREATE;
|
conf.mode |= SPDK_FTL_MODE_CREATE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -737,7 +737,7 @@ create_malloc_disk(struct spdk_bdev **bdev, const struct malloc_bdev_opts *opts)
|
|||||||
mdisk->disk.optimal_io_boundary = opts->optimal_io_boundary;
|
mdisk->disk.optimal_io_boundary = opts->optimal_io_boundary;
|
||||||
mdisk->disk.split_on_optimal_io_boundary = true;
|
mdisk->disk.split_on_optimal_io_boundary = true;
|
||||||
}
|
}
|
||||||
if (!spdk_mem_all_zero(&opts->uuid, sizeof(opts->uuid))) {
|
if (!spdk_uuid_is_null(&opts->uuid)) {
|
||||||
spdk_uuid_copy(&mdisk->disk.uuid, &opts->uuid);
|
spdk_uuid_copy(&mdisk->disk.uuid, &opts->uuid);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5943,7 +5943,7 @@ bdev_register_uuid_alias(void)
|
|||||||
bdev = allocate_bdev("bdev0");
|
bdev = allocate_bdev("bdev0");
|
||||||
|
|
||||||
/* Make sure an UUID was generated */
|
/* Make sure an UUID was generated */
|
||||||
CU_ASSERT_FALSE(spdk_mem_all_zero(&bdev->uuid, sizeof(bdev->uuid)));
|
CU_ASSERT_FALSE(spdk_uuid_is_null(&bdev->uuid));
|
||||||
|
|
||||||
/* Check that an UUID alias was registered */
|
/* Check that an UUID alias was registered */
|
||||||
spdk_uuid_fmt_lower(uuid, sizeof(uuid), &bdev->uuid);
|
spdk_uuid_fmt_lower(uuid, sizeof(uuid), &bdev->uuid);
|
||||||
|
@ -1361,7 +1361,7 @@ test_reservation_write_exclusive(void)
|
|||||||
SPDK_CU_ASSERT_FATAL(rc == 0);
|
SPDK_CU_ASSERT_FATAL(rc == 0);
|
||||||
|
|
||||||
/* Unregister Host C */
|
/* Unregister Host C */
|
||||||
memset(&g_ns_info.reg_hostid[2], 0, sizeof(struct spdk_uuid));
|
spdk_uuid_set_null(&g_ns_info.reg_hostid[2]);
|
||||||
|
|
||||||
/* Test Case: Read and Write commands from non-registrant Host C */
|
/* Test Case: Read and Write commands from non-registrant Host C */
|
||||||
cmd.nvme_cmd.opc = SPDK_NVME_OPC_WRITE;
|
cmd.nvme_cmd.opc = SPDK_NVME_OPC_WRITE;
|
||||||
@ -1430,7 +1430,7 @@ _test_reservation_write_exclusive_regs_only_and_all_regs(enum spdk_nvme_reservat
|
|||||||
SPDK_CU_ASSERT_FATAL(rc == 0);
|
SPDK_CU_ASSERT_FATAL(rc == 0);
|
||||||
|
|
||||||
/* Unregister Host C */
|
/* Unregister Host C */
|
||||||
memset(&g_ns_info.reg_hostid[2], 0, sizeof(struct spdk_uuid));
|
spdk_uuid_set_null(&g_ns_info.reg_hostid[2]);
|
||||||
|
|
||||||
/* Test Case: Read and Write commands from non-registrant Host C */
|
/* Test Case: Read and Write commands from non-registrant Host C */
|
||||||
cmd.nvme_cmd.opc = SPDK_NVME_OPC_READ;
|
cmd.nvme_cmd.opc = SPDK_NVME_OPC_READ;
|
||||||
@ -1472,7 +1472,7 @@ _test_reservation_exclusive_access_regs_only_and_all_regs(enum spdk_nvme_reserva
|
|||||||
SPDK_CU_ASSERT_FATAL(rc == 0);
|
SPDK_CU_ASSERT_FATAL(rc == 0);
|
||||||
|
|
||||||
/* Unregister Host B */
|
/* Unregister Host B */
|
||||||
memset(&g_ns_info.reg_hostid[1], 0, sizeof(struct spdk_uuid));
|
spdk_uuid_set_null(&g_ns_info.reg_hostid[1]);
|
||||||
|
|
||||||
/* Test Case: Issue a Read command from Host B */
|
/* Test Case: Issue a Read command from Host B */
|
||||||
cmd.nvme_cmd.opc = SPDK_NVME_OPC_READ;
|
cmd.nvme_cmd.opc = SPDK_NVME_OPC_READ;
|
||||||
|
Loading…
Reference in New Issue
Block a user