4 #include <libpmemobj.h>
14 if (left->
key == right->
key)
return 0;
19 if (left->
key == right->
key)
return 0;
44 printf(
"initialize pool num_pools= %d\n",
num_pools);
46 for (
int idx = 1; idx <=
num_pools; idx++) {
47 char pool_file_name[50];
48 char pool_free_slot_file_name[50];
49 char pool_number_str[4];
52 strcat(pool_file_name,
"_poolfile_");
53 strcat(pool_free_slot_file_name,
"_free_slot_");
54 sprintf(pool_number_str,
"%3d", idx);
55 strcat(pool_file_name, pool_number_str);
56 strcat(pool_free_slot_file_name, pool_number_str);
62 PMEMobjpool* free_slot_pool = pmemobj_open(pool_free_slot_file_name, POBJ_LAYOUT_NAME(free_slot_layout));
64 free_slots->
key = idx;
65 free_slots->
pool = free_slot_pool;
70 printf(
"pool free slot insert return %d\n", ret);
72 init_pool_kv->
key = idx;
102 char pool_file_name[50];
103 char pool_free_slot_file_name[50];
104 char pool_number_str[4];
107 strcat(pool_file_name,
"_poolfile_");
108 strcat(pool_free_slot_file_name,
"_free_slot_");
109 sprintf(pool_number_str,
"%3d",
num_pools);
110 strcat(pool_file_name, pool_number_str);
111 strcat(pool_free_slot_file_name, pool_number_str);
114 uintptr_t pmemaddr = (
uintptr_t)pmem_map_file(pool_file_name, allot_size, PMEM_FILE_CREATE,
116 PMEMobjpool* free_slot_pool = pmemobj_create(pool_free_slot_file_name, POBJ_LAYOUT_NAME(free_slot_layout),
117 PMEMOBJ_MIN_POOL, 0666);
119 TX_BEGIN (free_slot_pool) {
125 new_free_slots->
pool = free_slot_pool;
126 new_free_slots->
head = &(D_RO(pool_root)->head);
128 printf(
"new_entry %p new_free_slots %p\n", new_entry, new_free_slots);
129 printf(
"new_entry->pool_ptr %ld pmemaddr %ld\n", new_entry->
pool_ptr, pmemaddr);
130 printf(
"new_free_slots->pool %ld free_slot_pool %ld\n", new_free_slots->
pool, free_slot_pool);
158 if (offset < D_RO(node)->start_b) {
160 if (offset + size - 1 == D_RO(node)->start_b - 1) {
161 TX_BEGIN(temp_ptr->
pool) {
162 D_RW(node)->start_b = offset;
166 TX_BEGIN(temp_ptr->
pool) {
170 D_RW(to_insert_node)->start_b = offset;
171 D_RW(to_insert_node)->end_b = offset + size - 1;
180 if (offset == D_RO(node)->end_b + 1) {
181 TX_BEGIN(temp_ptr->
pool) {
182 D_RW(node)->end_b = D_RO(node)->end_b + size;
184 if (!TOID_IS_NULL(next_node)) {
185 if (offset + size - 1 == D_RO(next_node)->start_b - 1) {
186 D_RW(node)->end_b = D_RO(next_node)->end_b;
190 to_remove_node = next_node;
196 }
else if (offset > D_RO(node)->end_b + 1) {
198 if (!TOID_IS_NULL(next_node)) {
199 if (offset + size - 1 == D_RO(next_node)->start_b - 1) {
200 TX_BEGIN(temp_ptr->
pool) {
201 D_RW(next_node)->start_b = offset;
206 TX_BEGIN(temp_ptr->
pool) {
210 D_RW(to_insert_node)->start_b = offset;
211 D_RW(to_insert_node)->end_b = offset + size - 1;
224 printf(
"nvm_free: f_head %p\n", f_head);
225 printf(
"nvm free: flag %d\n", flag);
226 printf(
"nvm_free: node->end_b %p\n", D_RO(node)->end_b);
232 printf(
"nvm_free: to_remove->end_b %p\n", D_RO(to_remove_node)->end_b);
234 TX_BEGIN(temp_ptr->
pool) {
242 printf(
"nvm_free: to_insert_node->end_b %p, to_insert_node->start_b %p\n", D_RO(to_insert_node)->end_b, D_RO(to_insert_node)->start_b);
244 TX_BEGIN(temp_ptr->
pool) {
252 printf(
"nvm_free: to_insert_node->end_b %p, to_insert_node->start_b %p\n", D_RO(to_insert_node)->end_b, D_RO(to_insert_node)->start_b);
254 TX_BEGIN(temp_ptr->
pool) {
260 LOG_INFO(
"NVM freeing value pool_id = %ld, offset = %ld size = %ld\n", pool_id, offset, size);