Esempio n. 1
0
/*
 * 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;
}
Esempio n. 2
0
/*
 * 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;
}