From 922258a6a782c6291cc812a774fb69e9566edd43 Mon Sep 17 00:00:00 2001 From: Jim Harris Date: Tue, 2 Oct 2018 02:25:22 -0700 Subject: [PATCH] reduce: initialize vol pm pointer members at load Signed-off-by: Jim Harris Change-Id: Id3865c873be1ae80c3e27473ef369b1eeeac7a18 Reviewed-on: https://review.gerrithub.io/433513 Tested-by: SPDK CI Jenkins Chandler-Test-Pool: SPDK Automated Test System Reviewed-by: Paul Luse Reviewed-by: Ben Walker Reviewed-by: Shuhei Matsumoto --- lib/reduce/reduce.c | 23 +++++++++++++++-------- test/unit/lib/reduce/reduce.c/reduce_ut.c | 3 +++ 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/lib/reduce/reduce.c b/lib/reduce/reduce.c index 6d4979150..9fd34364d 100644 --- a/lib/reduce/reduce.c +++ b/lib/reduce/reduce.c @@ -193,6 +193,19 @@ spdk_reduce_vol_get_uuid(struct spdk_reduce_vol *vol) return &vol->params.uuid; } +static void +_initialize_vol_pm_pointers(struct spdk_reduce_vol *vol) +{ + /* Superblock is at the beginning of the pm file. */ + vol->pm_super = (struct spdk_reduce_vol_superblock *)vol->pm_file.pm_buf; + + /* Logical map immediately follows the super block. */ + vol->pm_logical_map = (uint64_t *)(vol->pm_super + 1); + + /* Chunks maps follow the logical map. */ + vol->pm_chunk_maps = vol->pm_logical_map + (vol->params.vol_size / vol->params.chunk_size); +} + struct reduce_init_load_ctx { struct spdk_reduce_vol *vol; struct spdk_reduce_vol_cb_args backing_cb_args; @@ -349,14 +362,7 @@ spdk_reduce_vol_init(struct spdk_reduce_vol_params *params, sizeof(vol->backing_super->signature)); memcpy(&vol->backing_super->params, params, sizeof(*params)); - /* Superblock is at the beginning of the pm file. */ - vol->pm_super = (struct spdk_reduce_vol_superblock *)vol->pm_file.pm_buf; - - /* Logical map immediately follows the super block. */ - vol->pm_logical_map = (uint64_t *)(vol->pm_super + 1); - - /* Chunks maps follow the logical map. */ - vol->pm_chunk_maps = vol->pm_logical_map + (params->vol_size / params->chunk_size); + _initialize_vol_pm_pointers(vol); memcpy(vol->pm_super, vol->backing_super, sizeof(*vol->backing_super)); /* Writing 0xFF's is equivalent of filling it all with SPDK_EMPTY_MAP_ENTRY. @@ -433,6 +439,7 @@ _load_read_super_and_path_cpl(void *cb_arg, int ziperrno) goto error; } + _initialize_vol_pm_pointers(vol); load_ctx->cb_fn(load_ctx->cb_arg, vol, 0); spdk_dma_free(load_ctx->path); free(load_ctx); diff --git a/test/unit/lib/reduce/reduce.c/reduce_ut.c b/test/unit/lib/reduce/reduce.c/reduce_ut.c index 16ff6c1f1..fb21ec829 100644 --- a/test/unit/lib/reduce/reduce.c/reduce_ut.c +++ b/test/unit/lib/reduce/reduce.c/reduce_ut.c @@ -447,6 +447,9 @@ load(void) 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(g_vol->params.vol_size == params.vol_size); + CU_ASSERT(g_vol->params.chunk_size == params.chunk_size); + CU_ASSERT(g_vol->params.backing_io_unit_size == params.backing_io_unit_size); g_ziperrno = -1; spdk_reduce_vol_unload(g_vol, unload_cb, NULL);