From 11bbb26e4f1b25095707b3fdf74bc3a892419d82 Mon Sep 17 00:00:00 2001 From: paul luse Date: Wed, 12 Jun 2019 08:48:33 -0400 Subject: [PATCH] lib/reduce: use helper function to get correct length of logical map When setting the offset into pmem for the chunk mamps, the wrong value was used for the length of the logical map resulting in map corruption after extended fio run. Fixes issue #813 Signed-off-by: paul luse Change-Id: Icb51cf8f38a04f05f69595ebd510ced7f1b608f3 Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/457818 Tested-by: SPDK CI Jenkins Reviewed-by: Darek Stojaczyk Reviewed-by: Shuhei Matsumoto --- lib/reduce/reduce.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/lib/reduce/reduce.c b/lib/reduce/reduce.c index 1496dfb2e..9c3c5dfc3 100644 --- a/lib/reduce/reduce.c +++ b/lib/reduce/reduce.c @@ -291,6 +291,8 @@ spdk_reduce_vol_get_uuid(struct spdk_reduce_vol *vol) static void _initialize_vol_pm_pointers(struct spdk_reduce_vol *vol) { + uint64_t logical_map_size; + /* Superblock is at the beginning of the pm file. */ vol->pm_super = (struct spdk_reduce_vol_superblock *)vol->pm_file.pm_buf; @@ -298,7 +300,8 @@ _initialize_vol_pm_pointers(struct spdk_reduce_vol *vol) 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); + logical_map_size = _get_pm_logical_map_size(vol->params.vol_size, vol->params.chunk_size); + vol->pm_chunk_maps = (uint64_t *)((uint8_t *)vol->pm_logical_map + logical_map_size); } /* We need 2 iovs during load - one for the superblock, another for the path */