From c6323a8d526caa96df357e8ae9c2554a1059a479 Mon Sep 17 00:00:00 2001 From: Jim Harris Date: Sun, 23 Sep 2018 21:32:56 -0700 Subject: [PATCH] reduce: close pm_file during unload Signed-off-by: Jim Harris Change-Id: Ibd0026a95cbda1577155a0d9520a93e2e4ba921b Reviewed-on: https://review.gerrithub.io/430649 Tested-by: SPDK CI Jenkins Reviewed-by: Shuhei Matsumoto Reviewed-by: Changpeng Liu Chandler-Test-Pool: SPDK Automated Test System --- include/spdk/reduce.h | 2 ++ lib/reduce/reduce.c | 4 +++ test/unit/lib/reduce/reduce.c/reduce_ut.c | 30 +++++++++++++++++------ 3 files changed, 28 insertions(+), 8 deletions(-) diff --git a/include/spdk/reduce.h b/include/spdk/reduce.h index 5d744dd29..c591f790a 100644 --- a/include/spdk/reduce.h +++ b/include/spdk/reduce.h @@ -101,6 +101,8 @@ struct spdk_reduce_pm_file { /** Size of the persistent memory file in bytes. */ uint64_t size; + + void (*close)(struct spdk_reduce_pm_file *); }; typedef void (*spdk_reduce_vol_op_complete)(void *ctx, int ziperrno); diff --git a/lib/reduce/reduce.c b/lib/reduce/reduce.c index 625955530..71643bd46 100644 --- a/lib/reduce/reduce.c +++ b/lib/reduce/reduce.c @@ -239,6 +239,10 @@ spdk_reduce_vol_unload(struct spdk_reduce_vol *vol, return; } + if (vol->pm_file.close != NULL) { + vol->pm_file.close(&vol->pm_file); + } + free(vol); cb_fn(cb_arg, 0); } diff --git a/test/unit/lib/reduce/reduce.c/reduce_ut.c b/test/unit/lib/reduce/reduce.c/reduce_ut.c index a9f931abd..a8e2aae62 100644 --- a/test/unit/lib/reduce/reduce.c/reduce_ut.c +++ b/test/unit/lib/reduce/reduce.c/reduce_ut.c @@ -147,6 +147,21 @@ get_backing_device_size(void) CU_ASSERT(backing_size == expected_backing_size); } +static void +pm_file_close(struct spdk_reduce_pm_file *pm_file) +{ + free(g_volatile_pm_buf); + g_volatile_pm_buf = NULL; +} + +static void +pm_file_destroy(void) +{ + CU_ASSERT(g_persistent_pm_buf != NULL); + free(g_persistent_pm_buf); + g_persistent_pm_buf = NULL; +} + static int pm_file_init(struct spdk_reduce_pm_file *pm_file, struct spdk_reduce_vol_params *params) { @@ -161,6 +176,7 @@ pm_file_init(struct spdk_reduce_pm_file *pm_file, struct spdk_reduce_vol_params SPDK_CU_ASSERT_FATAL(g_volatile_pm_buf != NULL); pm_file->pm_buf = g_volatile_pm_buf; + pm_file->close = pm_file_close; return 0; } @@ -233,10 +249,9 @@ init(void) g_ziperrno = -1; spdk_reduce_vol_unload(g_vol, unload_cb, NULL); CU_ASSERT(g_ziperrno == 0); - free(g_persistent_pm_buf); - g_persistent_pm_buf = NULL; - free(g_volatile_pm_buf); - g_volatile_pm_buf = NULL; + CU_ASSERT(g_volatile_pm_buf == NULL); + + pm_file_destroy(); } static void @@ -270,10 +285,9 @@ init_md(void) g_ziperrno = -1; spdk_reduce_vol_unload(g_vol, unload_cb, NULL); CU_ASSERT(g_ziperrno == 0); - free(g_persistent_pm_buf); - g_persistent_pm_buf = NULL; - free(g_volatile_pm_buf); - g_volatile_pm_buf = NULL; + CU_ASSERT(g_volatile_pm_buf == NULL); + + pm_file_destroy(); } int