Edata: Add a ranged bit.
We steal the dumpable bit, which we ended up not needing.
This commit is contained in:
committed by
David Goldblatt
parent
bd4fdf295e
commit
12eb888e54
@@ -246,11 +246,11 @@ emap_split_prepare(tsdn_t *tsdn, emap_t *emap, emap_prepare_t *prepare,
|
||||
(void *)((uintptr_t)edata_base_get(edata) + size_a), size_b,
|
||||
slab_b, szind_b, edata_sn_get(edata), edata_state_get(edata),
|
||||
edata_zeroed_get(edata), edata_committed_get(edata),
|
||||
edata_dumpable_get(edata), EXTENT_NOT_HEAD);
|
||||
edata_ranged_get(edata), EXTENT_NOT_HEAD);
|
||||
|
||||
/*
|
||||
* We use incorrect constants for things like arena ind, zero, dump, and
|
||||
* commit state, and head status. This is a fake edata_t, used to
|
||||
* We use incorrect constants for things like arena ind, zero, ranged,
|
||||
* and commit state, and head status. This is a fake edata_t, used to
|
||||
* facilitate a lookup.
|
||||
*/
|
||||
edata_t lead;
|
||||
|
14
src/extent.c
14
src/extent.c
@@ -80,7 +80,7 @@ ecache_alloc(tsdn_t *tsdn, pa_shard_t *shard, ehooks_t *ehooks,
|
||||
bool commit = true;
|
||||
edata_t *edata = extent_recycle(tsdn, shard, ehooks, ecache,
|
||||
new_addr, size, alignment, slab, szind, zero, &commit, false);
|
||||
assert(edata == NULL || edata_dumpable_get(edata));
|
||||
assert(edata == NULL || !edata_ranged_get(edata));
|
||||
return edata;
|
||||
}
|
||||
|
||||
@@ -110,7 +110,7 @@ ecache_alloc_grow(tsdn_t *tsdn, pa_shard_t *shard, ehooks_t *ehooks,
|
||||
size, alignment, slab, szind, zero, &commit);
|
||||
}
|
||||
|
||||
assert(edata == NULL || edata_dumpable_get(edata));
|
||||
assert(edata == NULL || !edata_ranged_get(edata));
|
||||
return edata;
|
||||
}
|
||||
|
||||
@@ -119,7 +119,7 @@ ecache_dalloc(tsdn_t *tsdn, pa_shard_t *shard, ehooks_t *ehooks,
|
||||
ecache_t *ecache, edata_t *edata) {
|
||||
assert(edata_base_get(edata) != NULL);
|
||||
assert(edata_size_get(edata) != 0);
|
||||
assert(edata_dumpable_get(edata));
|
||||
assert(!edata_ranged_get(edata));
|
||||
witness_assert_depth_to_rank(tsdn_witness_tsdp_get(tsdn),
|
||||
WITNESS_RANK_CORE, 0);
|
||||
|
||||
@@ -661,7 +661,8 @@ extent_grow_retained(tsdn_t *tsdn, pa_shard_t *shard, ehooks_t *ehooks,
|
||||
|
||||
edata_init(edata, ecache_ind_get(&shard->ecache_retained), ptr,
|
||||
alloc_size, false, SC_NSIZES, pa_shard_extent_sn_next(shard),
|
||||
extent_state_active, zeroed, committed, true, EXTENT_IS_HEAD);
|
||||
extent_state_active, zeroed, committed, /* ranged */ false,
|
||||
EXTENT_IS_HEAD);
|
||||
|
||||
if (extent_register_no_gdump_add(tsdn, edata)) {
|
||||
edata_cache_put(tsdn, &shard->edata_cache, edata);
|
||||
@@ -814,7 +815,8 @@ extent_alloc_wrapper(tsdn_t *tsdn, pa_shard_t *shard, ehooks_t *ehooks,
|
||||
}
|
||||
edata_init(edata, ecache_ind_get(&shard->ecache_dirty), addr,
|
||||
size, slab, szind, pa_shard_extent_sn_next(shard),
|
||||
extent_state_active, *zero, *commit, true, EXTENT_NOT_HEAD);
|
||||
extent_state_active, *zero, *commit, /* ranged */ false,
|
||||
EXTENT_NOT_HEAD);
|
||||
if (extent_register(tsdn, edata)) {
|
||||
edata_cache_put(tsdn, &shard->edata_cache, edata);
|
||||
return NULL;
|
||||
@@ -1059,7 +1061,7 @@ extent_dalloc_wrapper_try(tsdn_t *tsdn, pa_shard_t *shard, ehooks_t *ehooks,
|
||||
void
|
||||
extent_dalloc_wrapper(tsdn_t *tsdn, pa_shard_t *shard, ehooks_t *ehooks,
|
||||
edata_t *edata) {
|
||||
assert(edata_dumpable_get(edata));
|
||||
assert(!edata_ranged_get(edata));
|
||||
witness_assert_depth_to_rank(tsdn_witness_tsdp_get(tsdn),
|
||||
WITNESS_RANK_CORE, 0);
|
||||
|
||||
|
@@ -157,7 +157,7 @@ extent_alloc_dss(tsdn_t *tsdn, arena_t *arena, void *new_addr, size_t size,
|
||||
gap_addr_page, gap_size_page, false,
|
||||
SC_NSIZES, pa_shard_extent_sn_next(
|
||||
&arena->pa_shard), extent_state_active,
|
||||
false, true, true, EXTENT_NOT_HEAD);
|
||||
false, true, false, EXTENT_NOT_HEAD);
|
||||
}
|
||||
/*
|
||||
* Compute the address just past the end of the desired
|
||||
@@ -206,7 +206,7 @@ extent_alloc_dss(tsdn_t *tsdn, arena_t *arena, void *new_addr, size_t size,
|
||||
arena_ind_get(arena), ret, size,
|
||||
size, false, SC_NSIZES,
|
||||
extent_state_active, false, true,
|
||||
true, EXTENT_NOT_HEAD);
|
||||
false, EXTENT_NOT_HEAD);
|
||||
if (extent_purge_forced_wrapper(tsdn,
|
||||
ehooks, &edata, 0, size)) {
|
||||
memset(ret, 0, size);
|
||||
|
Reference in New Issue
Block a user