Line data Source code
1 : /*
2 : * slru_io.h
3 : *
4 : * Copyright (c) 2025-2026, PostgreSQL Global Development Group
5 : * src/bin/pg_upgrade/slru_io.h
6 : */
7 :
8 : #ifndef SLRU_IO_H
9 : #define SLRU_IO_H
10 :
11 : /*
12 : * State for reading or writing an SLRU, with a one page buffer.
13 : */
14 : typedef struct SlruSegState
15 : {
16 : bool writing;
17 : bool long_segment_names;
18 :
19 : char *dir;
20 : char *fn;
21 : int fd;
22 : int64 segno;
23 : uint64 pageno;
24 :
25 : PGAlignedBlock buf;
26 : } SlruSegState;
27 :
28 : extern SlruSegState *AllocSlruRead(const char *dir, bool long_segment_names);
29 : extern char *SlruReadSwitchPageSlow(SlruSegState *state, uint64 pageno);
30 : extern void FreeSlruRead(SlruSegState *state);
31 :
32 : static inline char *
33 0 : SlruReadSwitchPage(SlruSegState *state, uint64 pageno)
34 : {
35 0 : if (state->segno != -1 && pageno == state->pageno)
36 0 : return state->buf.data;
37 0 : return SlruReadSwitchPageSlow(state, pageno);
38 0 : }
39 :
40 : extern SlruSegState *AllocSlruWrite(const char *dir, bool long_segment_names);
41 : extern char *SlruWriteSwitchPageSlow(SlruSegState *state, uint64 pageno);
42 : extern void FreeSlruWrite(SlruSegState *state);
43 :
44 : static inline char *
45 0 : SlruWriteSwitchPage(SlruSegState *state, uint64 pageno)
46 : {
47 0 : if (state->segno != -1 && pageno == state->pageno)
48 0 : return state->buf.data;
49 0 : return SlruWriteSwitchPageSlow(state, pageno);
50 0 : }
51 :
52 : #endif /* SLRU_IO_H */
|