int convert_v1_v2(void *psf, void *addr) { poolset = psf; pop = addr; heap = (struct heap_layout *)((char *)addr + pop->heap_offset); if (le32toh(pop->hdr.major) != SOURCE_MAJOR_VERSION) return -1; pop->hdr.major = htole32(TARGET_MAJOR_VERSION); util_checksum(&pop->hdr, sizeof(pop->hdr), &pop->hdr.checksum, 1); struct lane_layout *lanes = (struct lane_layout *)((char *)addr + pop->lanes_offset); for (uint64_t i = 0; i < pop->nlanes; ++i) { lane_alloc_recover((struct allocator_lane_section *) &lanes[i].sections[LANE_SECTION_ALLOCATOR]); lane_list_recover((struct lane_list_section *) &lanes[i].sections[LANE_SECTION_LIST]); lane_tx_recover((struct lane_tx_layout *) &lanes[i].sections[LANE_SECTION_TRANSACTION]); } memset(lanes, 0, pop->nlanes * sizeof(struct lane_layout)); pmempool_convert_persist(poolset, lanes, pop->nlanes * sizeof(struct lane_layout)); return 0; }
int convert_v1_v2(void *psf, void *addr) { poolset = psf; pop = addr; heap = (struct heap_layout *)((char *)addr + pop->heap_offset); struct lane_layout *lanes = (struct lane_layout *)((char *)addr + pop->lanes_offset); for (uint64_t i = 0; i < pop->nlanes; ++i) { lane_alloc_recover((struct allocator_lane_section *) &lanes[i].sections[LANE_SECTION_ALLOCATOR]); lane_list_recover((struct lane_list_section *) &lanes[i].sections[LANE_SECTION_LIST]); lane_tx_recover((struct lane_tx_layout *) &lanes[i].sections[LANE_SECTION_TRANSACTION]); } memset(lanes, 0, pop->nlanes * sizeof(struct lane_layout)); pmempool_convert_persist(poolset, lanes, pop->nlanes * sizeof(struct lane_layout)); return 0; }