/* * replica_get_pool_size -- find the effective size (mapped) of a pool based * on metadata from given replica */ size_t replica_get_pool_size(struct pool_set *set, unsigned repn) { LOG(3, "set %p, repn %u", set, repn); struct pool_set_part *part = &PART(REP(set, repn), 0); int should_close_part = 0; int should_unmap_part = 0; if (part->fd == -1) { if (util_part_open(part, 0, 0)) return set->poolsize; should_close_part = 1; } if (part->addr == NULL) { if (util_map_part(part, NULL, MMAP_ALIGN_UP(sizeof(PMEMobjpool)), 0, MAP_SHARED, 1)) { util_part_fdclose(part); return set->poolsize; } should_unmap_part = 1; } PMEMobjpool *pop = (PMEMobjpool *)part->addr; size_t ret = pop->heap_offset + pop->heap_size; if (should_unmap_part) util_unmap_part(part); if (should_close_part) util_part_fdclose(part); return ret; }
/* * replica_get_pool_size -- find the effective size (mapped) of a pool based * on metadata from given replica */ size_t replica_get_pool_size(struct pool_set *set, unsigned repn) { struct pool_set_part *part = &PART(REP(set, repn), 0); int should_close_part = 0; if (part->fd == -1) { if (util_part_open(part, 0, 0)) return set->poolsize; if (util_map_part(part, NULL, sizeof(PMEMobjpool), 0, MAP_PRIVATE|MAP_NORESERVE)) { util_part_fdclose(part); return set->poolsize; } should_close_part = 1; } PMEMobjpool *pop = (PMEMobjpool *)part->addr; size_t ret = pop->heap_offset + pop->heap_size; if (should_close_part) { util_unmap_part(part); util_part_fdclose(part); } return ret; }