Use palloc_aligned() instead of doing manual alignment

The palloc_aligned() function has magic which makes it possible to call
pfree() on the aligned pointer.
pull/230/head
Andreas Karlsson 4 months ago committed by Andreas Karlsson
parent eafc34e335
commit 7aa9f96053
  1. 12
      contrib/pg_tde/src/smgr/pg_tde_smgr.c

@ -105,8 +105,7 @@ tde_mdwritev(SMgrRelation reln, ForkNumber forknum, BlockNumber blocknum,
}
else
{
unsigned char *local_blocks = palloc(BLCKSZ * (nblocks + 1));
unsigned char *local_blocks_aligned = (unsigned char *) TYPEALIGN(PG_IO_ALIGN_SIZE, local_blocks);
unsigned char *local_blocks = palloc_aligned(BLCKSZ * nblocks, PG_IO_ALIGN_SIZE, 0);
void **local_buffers = palloc_array(void *, nblocks);
if (tdereln->encryption_status == RELATION_KEY_NOT_AVAILABLE)
@ -123,7 +122,7 @@ tde_mdwritev(SMgrRelation reln, ForkNumber forknum, BlockNumber blocknum,
BlockNumber bn = blocknum + i;
unsigned char iv[16];
local_buffers[i] = &local_blocks_aligned[i * BLCKSZ];
local_buffers[i] = &local_blocks[i * BLCKSZ];
CalcBlockIv(forknum, bn, tdereln->relKey.base_iv, iv);
@ -177,8 +176,7 @@ tde_mdextend(SMgrRelation reln, ForkNumber forknum, BlockNumber blocknum,
}
else
{
unsigned char *local_blocks = palloc(BLCKSZ * (1 + 1));
unsigned char *local_blocks_aligned = (unsigned char *) TYPEALIGN(PG_IO_ALIGN_SIZE, local_blocks);
unsigned char *local_blocks = palloc_aligned(BLCKSZ, PG_IO_ALIGN_SIZE, 0);
unsigned char iv[16];
if (tdereln->encryption_status == RELATION_KEY_NOT_AVAILABLE)
@ -192,9 +190,9 @@ tde_mdextend(SMgrRelation reln, ForkNumber forknum, BlockNumber blocknum,
CalcBlockIv(forknum, blocknum, tdereln->relKey.base_iv, iv);
AesEncrypt(tdereln->relKey.key, iv, ((unsigned char *) buffer), BLCKSZ, local_blocks_aligned);
AesEncrypt(tdereln->relKey.key, iv, ((unsigned char *) buffer), BLCKSZ, local_blocks);
mdextend(reln, forknum, blocknum, local_blocks_aligned, skipFsync);
mdextend(reln, forknum, blocknum, local_blocks, skipFsync);
pfree(local_blocks);
}

Loading…
Cancel
Save