Age Owner Branch data TLA Line data Source code
1 : : /*-------------------------------------------------------------------------
2 : : *
3 : : * checksum_block_internal.h
4 : : * Core algorithm for page checksums, semi-private to checksum_impl.h
5 : : * and checksum.c.
6 : : *
7 : : * Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
8 : : * Portions Copyright (c) 1994, Regents of the University of California
9 : : *
10 : : * src/include/storage/checksum_block_internal.h
11 : : *
12 : : *-------------------------------------------------------------------------
13 : : */
14 : :
15 : : /* there is deliberately not an #ifndef CHECKSUM_BLOCK_INTERNAL_H here */
16 : :
17 : : uint32 sums[N_SUMS];
31 john.naylor@postgres 18 :GNC 2712054 : uint32 result = 0;
19 : : uint32 i,
20 : : j;
21 : :
22 : : /* ensure that the size is compatible with the algorithm */
23 : : Assert(sizeof(PGChecksummablePage) == BLCKSZ);
24 : :
25 : : /* initialize partial checksums to their corresponding offsets */
26 : 2712054 : memcpy(sums, checksumBaseOffsets, sizeof(checksumBaseOffsets));
27 : :
28 : : /* main checksum calculation */
29 [ + + - - ]: 176283510 : for (i = 0; i < (uint32) (BLCKSZ / (sizeof(uint32) * N_SUMS)); i++)
[ + + ]
30 [ + + - - ]: 5727858048 : for (j = 0; j < N_SUMS; j++)
[ + + ]
31 : 5554286592 : CHECKSUM_COMP(sums[j], page->data[i][j]);
32 : :
33 : : /* finally add in two rounds of zeroes for additional mixing */
34 [ + + - - ]: 8136162 : for (i = 0; i < 2; i++)
[ + + ]
35 [ + + - - ]: 178995564 : for (j = 0; j < N_SUMS; j++)
[ + + ]
36 : 173571456 : CHECKSUM_COMP(sums[j], 0);
37 : :
38 : : /* xor fold partial checksums together */
39 [ + + - - ]: 89497782 : for (i = 0; i < N_SUMS; i++)
[ + + ]
40 : 86785728 : result ^= sums[i];
41 : :
42 : 2712054 : return result;
|