diff --git a/lib/lvol/lvol.c b/lib/lvol/lvol.c index 95bf1cb68..2bb1981c4 100644 --- a/lib/lvol/lvol.c +++ b/lib/lvol/lvol.c @@ -148,6 +148,9 @@ _spdk_load_next_lvol(void *cb_arg, struct spdk_blob *blob, int lvolerrno) struct spdk_lvol *lvol, *tmp; spdk_blob_id blob_id; char uuid[UUID_STRING_LEN]; + const char *attr; + size_t value_len; + int rc; if (lvolerrno == -ENOENT) { /* Finished iterating */ @@ -197,6 +200,18 @@ _spdk_load_next_lvol(void *cb_arg, struct spdk_blob *blob, int lvolerrno) return; } + rc = spdk_bs_md_get_xattr_value(blob, "name", (const void **)&attr, &value_len); + if (rc != 0 || value_len > SPDK_LVOL_NAME_MAX) { + SPDK_ERRLOG("Cannot assign lvol name\n"); + req->cb_fn(req->cb_arg, lvs, -EINVAL); + free(lvol->old_name); + free(req); + free(lvol); + return; + } + + strncpy(lvol->name, attr, SPDK_LVOL_NAME_MAX); + TAILQ_INSERT_TAIL(&lvs->lvols, lvol, link); lvs->lvol_count++; diff --git a/test/unit/lib/lvol/lvol.c/lvol_ut.c b/test/unit/lib/lvol/lvol.c/lvol_ut.c index 703625bb4..01c119dc0 100644 --- a/test/unit/lib/lvol/lvol.c/lvol_ut.c +++ b/test/unit/lib/lvol/lvol.c/lvol_ut.c @@ -1056,18 +1056,21 @@ lvols_load(void) SPDK_CU_ASSERT_FATAL(blob1 != NULL); blob1->id = 0x1; spdk_blob_md_set_xattr(blob1, "uuid", uuid, UUID_STRING_LEN); + spdk_blob_md_set_xattr(blob1, "name", "lvol1", strnlen("lvol1", SPDK_LVOL_NAME_MAX) + 1); blob1->uuid[UUID_STRING_LEN - 2] = '1'; blob2 = calloc(1, sizeof(*blob2)); SPDK_CU_ASSERT_FATAL(blob2 != NULL); blob2->id = 0x2; spdk_blob_md_set_xattr(blob2, "uuid", uuid, UUID_STRING_LEN); + spdk_blob_md_set_xattr(blob2, "name", "lvol2", strnlen("lvol2", SPDK_LVOL_NAME_MAX) + 1); blob2->uuid[UUID_STRING_LEN - 2] = '2'; blob3 = calloc(1, sizeof(*blob3)); SPDK_CU_ASSERT_FATAL(blob3 != NULL); blob3->id = 0x2; spdk_blob_md_set_xattr(blob2, "uuid", uuid, UUID_STRING_LEN); + spdk_blob_md_set_xattr(blob3, "name", "lvol3", strnlen("lvol3", SPDK_LVOL_NAME_MAX) + 1); blob3->uuid[UUID_STRING_LEN - 2] = '3'; spdk_allocate_thread(_lvol_send_msg, NULL, NULL); @@ -1143,18 +1146,21 @@ lvol_open(void) SPDK_CU_ASSERT_FATAL(blob1 != NULL); blob1->id = 0x1; spdk_blob_md_set_xattr(blob1, "uuid", uuid, UUID_STRING_LEN); + spdk_blob_md_set_xattr(blob1, "name", "lvol1", strnlen("lvol1", SPDK_LVOL_NAME_MAX) + 1); blob1->uuid[UUID_STRING_LEN - 2] = '1'; blob2 = calloc(1, sizeof(*blob2)); SPDK_CU_ASSERT_FATAL(blob2 != NULL); blob2->id = 0x2; spdk_blob_md_set_xattr(blob2, "uuid", uuid, UUID_STRING_LEN); + spdk_blob_md_set_xattr(blob2, "name", "lvol2", strnlen("lvol2", SPDK_LVOL_NAME_MAX) + 1); blob2->uuid[UUID_STRING_LEN - 2] = '2'; blob3 = calloc(1, sizeof(*blob3)); SPDK_CU_ASSERT_FATAL(blob3 != NULL); blob3->id = 0x2; spdk_blob_md_set_xattr(blob2, "uuid", uuid, UUID_STRING_LEN); + spdk_blob_md_set_xattr(blob3, "name", "lvol3", strnlen("lvol3", SPDK_LVOL_NAME_MAX) + 1); blob3->uuid[UUID_STRING_LEN - 2] = '3'; spdk_allocate_thread(_lvol_send_msg, NULL, NULL);