Coverage Report

Created: 2026-11-12 07:20

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/postgres/src/backend/storage/freespace/indexfsm.c
Line
Count
Source
1
/*-------------------------------------------------------------------------
2
 *
3
 * indexfsm.c
4
 *    POSTGRES free space map for quickly finding free pages in relations
5
 *
6
 *
7
 * Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
8
 * Portions Copyright (c) 1994, Regents of the University of California
9
 *
10
 * IDENTIFICATION
11
 *    src/backend/storage/freespace/indexfsm.c
12
 *
13
 *
14
 * NOTES:
15
 *
16
 *  This is similar to the FSM used for heap, in freespace.c, but instead
17
 *  of tracking the amount of free space on pages, we only track whether
18
 *  pages are completely free or in-use. We use the same FSM implementation
19
 *  as for heaps, using 0 to denote used pages, and (BLCKSZ - 1) for unused.
20
 *
21
 *-------------------------------------------------------------------------
22
 */
23
#include "postgres.h"
24
25
#include "storage/freespace.h"
26
#include "storage/indexfsm.h"
27
28
/*
29
 * Exported routines
30
 */
31
32
/*
33
 * GetFreeIndexPage - return a free page from the FSM
34
 *
35
 * As a side effect, the page is marked as used in the FSM.
36
 */
37
BlockNumber
38
GetFreeIndexPage(Relation rel)
39
0
{
40
0
  BlockNumber blkno = GetPageWithFreeSpace(rel, BLCKSZ / 2);
41
42
0
  if (blkno != InvalidBlockNumber)
43
0
    RecordUsedIndexPage(rel, blkno);
44
45
0
  return blkno;
46
0
}
47
48
/*
49
 * RecordFreeIndexPage - mark a page as free in the FSM
50
 */
51
void
52
RecordFreeIndexPage(Relation rel, BlockNumber freeBlock)
53
0
{
54
0
  RecordPageWithFreeSpace(rel, freeBlock, BLCKSZ - 1);
55
0
}
56
57
58
/*
59
 * RecordUsedIndexPage - mark a page as used in the FSM
60
 */
61
void
62
RecordUsedIndexPage(Relation rel, BlockNumber usedBlock)
63
0
{
64
0
  RecordPageWithFreeSpace(rel, usedBlock, 0);
65
0
}
66
67
/*
68
 * IndexFreeSpaceMapVacuum - scan and fix any inconsistencies in the FSM
69
 */
70
void
71
IndexFreeSpaceMapVacuum(Relation rel)
72
0
{
73
0
  FreeSpaceMapVacuum(rel);
74
0
}