mdbx: rename page2payload() and payload2page().

This commit is contained in:
Леонид Юрьев (Leonid Yuriev)
2025-09-04 01:16:54 +03:00
parent 9ad4fe8f96
commit 9f2352681c
11 changed files with 28 additions and 27 deletions

View File

@@ -517,7 +517,7 @@ __cold int mdbx_env_openW(MDBX_env *env, const wchar_t *pathname, MDBX_env_flags
DEBUG("opened database version %u, pagesize %u", (uint8_t)unaligned_peek_u64(4, head.ptr_c->magic_and_version),
env->ps);
DEBUG("using meta page %" PRIaPGNO ", txn %" PRIaTXN, data_page(head.ptr_c)->pgno, head.txnid);
DEBUG("using meta page %" PRIaPGNO ", txn %" PRIaTXN, payload2page(head.ptr_c)->pgno, head.txnid);
DEBUG("depth: %u", db->height);
DEBUG("entries: %" PRIu64, db->items);
DEBUG("branch pages: %" PRIaPGNO, db->branch_pages);

View File

@@ -248,13 +248,13 @@ static inline void get_key_optional(const node_t *node, MDBX_val *keyptr /* __ma
*keyptr = get_key(node);
}
MDBX_NOTHROW_PURE_FUNCTION static inline void *page_data(const page_t *mp) { return ptr_disp(mp, PAGEHDRSZ); }
MDBX_NOTHROW_PURE_FUNCTION static inline void *page2payload(const page_t *mp) { return ptr_disp(mp, PAGEHDRSZ); }
MDBX_NOTHROW_PURE_FUNCTION static inline const page_t *data_page(const void *data) {
MDBX_NOTHROW_PURE_FUNCTION static inline const page_t *payload2page(const void *data) {
return container_of(data, page_t, entries);
}
MDBX_NOTHROW_PURE_FUNCTION static inline meta_t *page_meta(page_t *mp) { return (meta_t *)page_data(mp); }
MDBX_NOTHROW_PURE_FUNCTION static inline meta_t *page_meta(page_t *mp) { return (meta_t *)page2payload(mp); }
MDBX_NOTHROW_PURE_FUNCTION static inline size_t page_numkeys(const page_t *mp) {
assert(mp->lower <= mp->upper);

View File

@@ -1010,9 +1010,9 @@ __hot int cursor_put(MDBX_cursor *mc, const MDBX_val *key, MDBX_val *data, unsig
}
node_set_ds(node, data->iov_len);
if (flags & MDBX_RESERVE)
data->iov_base = page_data(lp.page);
data->iov_base = page2payload(lp.page);
else
memcpy(page_data(lp.page), data->iov_base, data->iov_len);
memcpy(page2payload(lp.page), data->iov_base, data->iov_len);
if (AUDIT_ENABLED()) {
err = cursor_validate(mc);
@@ -1234,7 +1234,7 @@ __hot int cursor_put(MDBX_cursor *mc, const MDBX_val *key, MDBX_val *data, unsig
cASSERT(mc, fp->upper + growth < UINT16_MAX);
mp->upper = fp->upper + (indx_t)growth;
if (unlikely(fp_flags & P_DUPFIX)) {
memcpy(page_data(mp), page_data(fp), page_numkeys(fp) * fp->dupfix_ksize);
memcpy(page2payload(mp), page2payload(fp), page_numkeys(fp) * fp->dupfix_ksize);
cASSERT(mc, (((mp->dupfix_ksize & page_numkeys(mp)) ^ mp->upper) & 1) == 0);
} else {
cASSERT(mc, (mp->upper & 1) == 0);
@@ -2114,7 +2114,7 @@ __hot int cursor_ops(MDBX_cursor *mc, MDBX_val *key, MDBX_val *data, const MDBX_
cASSERT(mc, is_filled(mc) && inner_filled(mc));
MDBX_cursor *mx = &mc->subcur->cursor;
data->iov_len = page_numkeys(mx->pg[mx->top]) * mx->tree->dupfix_size;
data->iov_base = page_data(mx->pg[mx->top]);
data->iov_base = page2payload(mx->pg[mx->top]);
mx->ki[mx->top] = (indx_t)page_numkeys(mx->pg[mx->top]) - 1;
return MDBX_SUCCESS;
}

View File

@@ -726,7 +726,7 @@ __cold int dxb_setup(MDBX_env *env, const int lck_rc, const mdbx_mode_t mode_bit
meta_t const *const target = METAPAGE(env, env->stuck_meta);
err = meta_validate_copy(env, target, &clone);
if (unlikely(err != MDBX_SUCCESS)) {
ERROR("target meta[%u] is corrupted", bytes2pgno(env, ptr_dist(data_page(target), env->dxb_mmap.base)));
ERROR("target meta[%u] is corrupted", bytes2pgno(env, ptr_dist(payload2page(target), env->dxb_mmap.base)));
meta_troika_dump(env, &troika);
return MDBX_CORRUPTED;
}
@@ -1161,7 +1161,7 @@ int dxb_sync_locked(MDBX_env *env, unsigned flags, meta_t *const pending, troika
target = (meta_t *)head.ptr_c;
else {
NOTICE("skip update meta%" PRIaPGNO " for txn#%" PRIaTXN ", since it is already steady",
data_page(head.ptr_c)->pgno, head.txnid);
payload2page(head.ptr_c)->pgno, head.txnid);
return MDBX_SUCCESS;
}
} else {
@@ -1173,7 +1173,7 @@ int dxb_sync_locked(MDBX_env *env, unsigned flags, meta_t *const pending, troika
/* LY: step#2 - update meta-page. */
DEBUG("writing meta%" PRIaPGNO " = root %" PRIaPGNO "/%" PRIaPGNO ", geo %" PRIaPGNO "/%" PRIaPGNO "-%" PRIaPGNO
"/%" PRIaPGNO " +%u -%u, txn_id %" PRIaTXN ", %s",
data_page(target)->pgno, pending->trees.main.root, pending->trees.gc.root, pending->geometry.lower,
payload2page(target)->pgno, pending->trees.main.root, pending->trees.gc.root, pending->geometry.lower,
pending->geometry.first_unallocated, pending->geometry.now, pending->geometry.upper,
pv2pages(pending->geometry.grow_pv), pv2pages(pending->geometry.shrink_pv), pending->unsafe_txnid,
durable_caption(pending));
@@ -1249,7 +1249,7 @@ int dxb_sync_locked(MDBX_env *env, unsigned flags, meta_t *const pending, troika
#if MDBX_ENABLE_PGOP_STAT
env->lck->pgops.wops.weak += 1;
#endif /* MDBX_ENABLE_PGOP_STAT */
const page_t *page = data_page(target);
const page_t *page = payload2page(target);
rc = osal_pwrite(env->fd4meta, page, env->ps, ptr_dist(page, env->dxb_mmap.base));
if (likely(rc == MDBX_SUCCESS)) {
osal_flush_incoherent_mmap(target, sizeof(meta_t), globals.sys_pagesize);

View File

@@ -179,7 +179,7 @@ retry:;
goto bailout;
}
if (!head.is_steady || ((flags & MDBX_SAFE_NOSYNC) == 0 && unsynced_pages)) {
DEBUG("meta-head %" PRIaPGNO ", %s, sync_pending %" PRIu64, data_page(head.ptr_c)->pgno,
DEBUG("meta-head %" PRIaPGNO ", %s, sync_pending %" PRIu64, payload2page(head.ptr_c)->pgno,
durable_caption(head.ptr_c), unsynced_pages);
meta_t meta = *head.ptr_c;
rc = dxb_sync_locked(env, flags, &meta, &env->basal_txn->wr.troika);

View File

@@ -1365,7 +1365,7 @@ __hot pgr_t gc_alloc_single(const MDBX_cursor *const mc) {
DEBUG_EXTRA("db %d use loose page %" PRIaPGNO, cursor_dbi_dbg(mc), lp->pgno);
tASSERT(txn, lp->pgno < txn->geo.first_unallocated);
tASSERT(txn, lp->pgno >= NUM_METAS);
VALGRIND_MAKE_MEM_UNDEFINED(page_data(lp), page_space(txn->env));
VALGRIND_MAKE_MEM_UNDEFINED(page2payload(lp), page_space(txn->env));
lp->txnid = txn->front_txnid;
pgr_t ret = {lp, MDBX_SUCCESS};
return ret;

View File

@@ -213,7 +213,7 @@ static int meta_unsteady(MDBX_env *env, const txnid_t inclusive_upto, const pgno
osal_flush_incoherent_cpu_writeback();
if (!MDBX_AVOID_MSYNC)
return MDBX_RESULT_TRUE;
ptr = data_page(meta);
ptr = payload2page(meta);
offset = ptr_dist(ptr, env->dxb_mmap.base);
bytes = env->ps;
}
@@ -275,7 +275,7 @@ int meta_sync(const MDBX_env *env, const meta_ptr_t head) {
#if MDBX_ENABLE_PGOP_ST
env->lck->pgops.wops.weak += 1;
#endif /* MDBX_ENABLE_PGOP_STAT */
const page_t *page = data_page(head.ptr_c);
const page_t *page = payload2page(head.ptr_c);
rc = osal_pwrite(env->fd4meta, page, env->ps, ptr_dist(page, env->dxb_mmap.base));
if (likely(rc == MDBX_SUCCESS) && env->fd4meta == env->lazy_fd) {
@@ -652,5 +652,5 @@ __cold int meta_validate(MDBX_env *env, meta_t *const meta, const page_t *const
__cold int meta_validate_copy(MDBX_env *env, const meta_t *meta, meta_t *dest) {
*dest = *meta;
return meta_validate(env, dest, data_page(meta), bytes2pgno(env, ptr_dist(meta, env->dxb_mmap.base)), nullptr);
return meta_validate(env, dest, payload2page(meta), bytes2pgno(env, ptr_dist(meta, env->dxb_mmap.base)), nullptr);
}

View File

@@ -162,7 +162,7 @@ __hot int __must_check_result node_add_leaf(MDBX_cursor *mc, size_t indx, const
}
} else {
poke_pgno(nodedata, largepage->pgno);
nodedata = page_data(largepage);
nodedata = page2payload(largepage);
}
if (unlikely(flags & MDBX_RESERVE))
data->iov_base = nodedata;
@@ -233,7 +233,7 @@ __noinline int node_read_bigdata(MDBX_cursor *mc, const node_t *node, MDBX_val *
}
cASSERT(mc, page_type(lp.page) == P_LARGE);
data->iov_base = page_data(lp.page);
data->iov_base = page2payload(lp.page);
if (!MDBX_DISABLE_VALIDATION) {
const MDBX_env *env = mc->txn->env;
const size_t dsize = data->iov_len;

View File

@@ -566,7 +566,7 @@ status_done:
if (likely(npages == 1 && suitable4loose(txn, pgno)) && (di || !txn->wr.dirtylist)) {
DEBUG("loosen dirty page %" PRIaPGNO, pgno);
if (MDBX_DEBUG != 0 || unlikely(txn->env->flags & MDBX_PAGEPERTURB))
memset(page_data(mp), -1, txn->env->ps - PAGEHDRSZ);
memset(page2payload(mp), -1, txn->env->ps - PAGEHDRSZ);
mp->txnid = INVALID_TXNID;
mp->flags = P_LOOSE;
page_next(mp) = txn->wr.loose_pages;
@@ -575,8 +575,8 @@ status_done:
#if MDBX_ENABLE_REFUND
txn->wr.loose_refund_wl = (pgno + 2 > txn->wr.loose_refund_wl) ? pgno + 2 : txn->wr.loose_refund_wl;
#endif /* MDBX_ENABLE_REFUND */
VALGRIND_MAKE_MEM_NOACCESS(page_data(mp), txn->env->ps - PAGEHDRSZ);
MDBX_ASAN_POISON_MEMORY_REGION(page_data(mp), txn->env->ps - PAGEHDRSZ);
VALGRIND_MAKE_MEM_NOACCESS(page2payload(mp), txn->env->ps - PAGEHDRSZ);
MDBX_ASAN_POISON_MEMORY_REGION(page2payload(mp), txn->env->ps - PAGEHDRSZ);
return MDBX_SUCCESS;
}
@@ -600,8 +600,9 @@ status_done:
#endif
page_kill(txn, mp, pgno, npages);
if ((txn->flags & MDBX_WRITEMAP) == 0) {
VALGRIND_MAKE_MEM_NOACCESS(page_data(pgno2page(txn->env, pgno)), pgno2bytes(txn->env, npages) - PAGEHDRSZ);
MDBX_ASAN_POISON_MEMORY_REGION(page_data(pgno2page(txn->env, pgno)), pgno2bytes(txn->env, npages) - PAGEHDRSZ);
VALGRIND_MAKE_MEM_NOACCESS(page2payload(pgno2page(txn->env, pgno)), pgno2bytes(txn->env, npages) - PAGEHDRSZ);
MDBX_ASAN_POISON_MEMORY_REGION(page2payload(pgno2page(txn->env, pgno)),
pgno2bytes(txn->env, npages) - PAGEHDRSZ);
}
}
skip_invalidate:

View File

@@ -132,8 +132,8 @@ static inline void page_wash(MDBX_txn *txn, size_t di, page_t *const mp, const s
txn->wr.writemap_dirty_npages -= (txn->wr.writemap_dirty_npages > npages) ? npages : txn->wr.writemap_dirty_npages;
}
VALGRIND_MAKE_MEM_UNDEFINED(mp, PAGEHDRSZ);
VALGRIND_MAKE_MEM_NOACCESS(page_data(mp), pgno2bytes(txn->env, npages) - PAGEHDRSZ);
MDBX_ASAN_POISON_MEMORY_REGION(page_data(mp), pgno2bytes(txn->env, npages) - PAGEHDRSZ);
VALGRIND_MAKE_MEM_NOACCESS(page2payload(mp), pgno2bytes(txn->env, npages) - PAGEHDRSZ);
MDBX_ASAN_POISON_MEMORY_REGION(page2payload(mp), pgno2bytes(txn->env, npages) - PAGEHDRSZ);
}
MDBX_INTERNAL size_t page_subleaf2_reserve(const MDBX_env *env, size_t host_page_room, size_t subpage_len,

View File

@@ -463,7 +463,7 @@ static int page_merge(MDBX_cursor *csrc, MDBX_cursor *cdst) {
return rc;
key.iov_len = csrc->tree->dupfix_size;
key.iov_base = page_data(psrc);
key.iov_base = page2payload(psrc);
size_t i = 0;
do {
rc = node_add_dupfix(cdst, ii++, &key);