test/reduce: make copy of pmem_map_file path

The value passed comes directly from the spdk_reduce_vol structure,
meaning that we can't reference it after the associated volume
structure has been freed.

We'll need to reference this for the next patch that supports
destroy a compressed volume and unlinking the associated metadata
file.

Signed-off-by: Jim Harris <james.r.harris@intel.com>
Change-Id: I7ec70972faaec52e405e8d51f4b645c6e623e9dc

Reviewed-on: https://review.gerrithub.io/c/437994
Chandler-Test-Pool: SPDK Automated Test System <sys_sgsw@intel.com>
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
Reviewed-by: wuzhouhui <wuzhouhui@kingsoft.com>
Reviewed-by: Changpeng Liu <changpeng.liu@intel.com>
This commit is contained in:
Jim Harris 2018-12-20 03:57:52 -07:00
parent 63ba545f54
commit c887a4f9cf

View File

@ -47,7 +47,7 @@ static char *g_persistent_pm_buf;
static size_t g_persistent_pm_buf_len; static size_t g_persistent_pm_buf_len;
static bool g_backing_dev_closed; static bool g_backing_dev_closed;
static char *g_backing_dev_buf; static char *g_backing_dev_buf;
static const char *g_path; static char g_path[REDUCE_PATH_MAX];
#define TEST_MD_PATH "/tmp" #define TEST_MD_PATH "/tmp"
@ -113,7 +113,7 @@ pmem_map_file(const char *path, size_t len, int flags, mode_t mode,
size_t *mapped_lenp, int *is_pmemp) size_t *mapped_lenp, int *is_pmemp)
{ {
CU_ASSERT(g_volatile_pm_buf == NULL); CU_ASSERT(g_volatile_pm_buf == NULL);
g_path = path; snprintf(g_path, sizeof(g_path), "%s", path);
*is_pmemp = 1; *is_pmemp = 1;
if (g_persistent_pm_buf == NULL) { if (g_persistent_pm_buf == NULL) {
@ -351,12 +351,12 @@ _init_backing_dev(uint32_t backing_blocklen)
backing_dev_init(&backing_dev, &params, backing_blocklen); backing_dev_init(&backing_dev, &params, backing_blocklen);
g_vol = NULL; g_vol = NULL;
g_path = NULL; memset(g_path, 0, sizeof(g_path));
g_reduce_errno = -1; g_reduce_errno = -1;
spdk_reduce_vol_init(&params, &backing_dev, TEST_MD_PATH, init_cb, NULL); spdk_reduce_vol_init(&params, &backing_dev, TEST_MD_PATH, init_cb, NULL);
CU_ASSERT(g_reduce_errno == 0); CU_ASSERT(g_reduce_errno == 0);
SPDK_CU_ASSERT_FATAL(g_vol != NULL); SPDK_CU_ASSERT_FATAL(g_vol != NULL);
SPDK_CU_ASSERT_FATAL(g_path != NULL); CU_ASSERT(strncmp(TEST_MD_PATH, g_path, strlen(TEST_MD_PATH)) == 0);
/* Confirm that libreduce persisted the params to the backing device. */ /* Confirm that libreduce persisted the params to the backing device. */
CU_ASSERT(memcmp(g_backing_dev_buf, SPDK_REDUCE_SIGNATURE, 8) == 0); CU_ASSERT(memcmp(g_backing_dev_buf, SPDK_REDUCE_SIGNATURE, 8) == 0);
persistent_params = (struct spdk_reduce_vol_params *)(g_backing_dev_buf + 8); persistent_params = (struct spdk_reduce_vol_params *)(g_backing_dev_buf + 8);
@ -405,7 +405,7 @@ _load(uint32_t backing_blocklen)
spdk_reduce_vol_init(&params, &backing_dev, TEST_MD_PATH, init_cb, NULL); spdk_reduce_vol_init(&params, &backing_dev, TEST_MD_PATH, init_cb, NULL);
CU_ASSERT(g_reduce_errno == 0); CU_ASSERT(g_reduce_errno == 0);
SPDK_CU_ASSERT_FATAL(g_vol != NULL); SPDK_CU_ASSERT_FATAL(g_vol != NULL);
SPDK_CU_ASSERT_FATAL(g_path != NULL); CU_ASSERT(strncmp(TEST_MD_PATH, g_path, strlen(TEST_MD_PATH)) == 0);
memcpy(pmem_file_path, g_path, sizeof(pmem_file_path)); memcpy(pmem_file_path, g_path, sizeof(pmem_file_path));
g_reduce_errno = -1; g_reduce_errno = -1;
@ -413,12 +413,11 @@ _load(uint32_t backing_blocklen)
CU_ASSERT(g_reduce_errno == 0); CU_ASSERT(g_reduce_errno == 0);
g_vol = NULL; g_vol = NULL;
g_path = NULL; memset(g_path, 0, sizeof(g_path));
g_reduce_errno = -1; g_reduce_errno = -1;
spdk_reduce_vol_load(&backing_dev, load_cb, NULL); spdk_reduce_vol_load(&backing_dev, load_cb, NULL);
CU_ASSERT(g_reduce_errno == 0); CU_ASSERT(g_reduce_errno == 0);
SPDK_CU_ASSERT_FATAL(g_vol != NULL); SPDK_CU_ASSERT_FATAL(g_vol != NULL);
SPDK_CU_ASSERT_FATAL(g_path != NULL);
CU_ASSERT(strncmp(g_path, pmem_file_path, sizeof(pmem_file_path)) == 0); CU_ASSERT(strncmp(g_path, pmem_file_path, sizeof(pmem_file_path)) == 0);
CU_ASSERT(g_vol->params.vol_size == params.vol_size); CU_ASSERT(g_vol->params.vol_size == params.vol_size);
CU_ASSERT(g_vol->params.chunk_size == params.chunk_size); CU_ASSERT(g_vol->params.chunk_size == params.chunk_size);