summaryrefslogtreecommitdiff
path: root/src/backend/storage/freespace/freespace.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/storage/freespace/freespace.c')
-rw-r--r--src/backend/storage/freespace/freespace.c27
1 files changed, 12 insertions, 15 deletions
diff --git a/src/backend/storage/freespace/freespace.c b/src/backend/storage/freespace/freespace.c
index 7b66340f56c..9373675b8cc 100644
--- a/src/backend/storage/freespace/freespace.c
+++ b/src/backend/storage/freespace/freespace.c
@@ -8,7 +8,7 @@
* Portions Copyright (c) 1994, Regents of the University of California
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/storage/freespace/freespace.c,v 1.59 2008/01/01 19:45:51 momjian Exp $
+ * $PostgreSQL: pgsql/src/backend/storage/freespace/freespace.c,v 1.60 2008/03/10 02:04:09 tgl Exp $
*
*
* NOTES:
@@ -143,7 +143,7 @@ static bool lookup_fsm_page_entry(FSMRelation *fsmrel, BlockNumber page,
static void compact_fsm_storage(void);
static void push_fsm_rels_after(FSMRelation *afterRel);
static void pack_incoming_pages(FSMPageData *newLocation, int newPages,
- PageFreeSpaceInfo *pageSpaces, int nPages);
+ FSMPageData *pageSpaces, int nPages);
static void pack_existing_pages(FSMPageData *newLocation, int newPages,
FSMPageData *oldLocation, int oldPages);
static int fsm_calc_request(FSMRelation *fsmrel);
@@ -375,7 +375,7 @@ void
RecordRelationFreeSpace(RelFileNode *rel,
BlockNumber interestingPages,
int nPages,
- PageFreeSpaceInfo *pageSpaces)
+ FSMPageData *pageSpaces)
{
FSMRelation *fsmrel;
@@ -415,14 +415,12 @@ RecordRelationFreeSpace(RelFileNode *rel,
for (i = 0; i < nPages; i++)
{
- BlockNumber page = pageSpaces[i].blkno;
- Size avail = pageSpaces[i].avail;
+ BlockNumber page = FSMPageGetPageNum(&pageSpaces[i]);
/* Check caller provides sorted data */
- if (i > 0 && page <= pageSpaces[i - 1].blkno)
+ if (i > 0 && page <= FSMPageGetPageNum(&pageSpaces[i - 1]))
elog(ERROR, "free-space data is not in page order");
- FSMPageSetPageNum(newLocation, page);
- FSMPageSetSpace(newLocation, avail);
+ *newLocation = pageSpaces[i];
newLocation++;
}
fsmrel->storedPages = nPages;
@@ -1534,7 +1532,7 @@ push_fsm_rels_after(FSMRelation *afterRel)
static void
pack_incoming_pages(FSMPageData *newLocation, int newPages,
- PageFreeSpaceInfo *pageSpaces, int nPages)
+ FSMPageData *pageSpaces, int nPages)
{
int histogram[HISTOGRAM_BINS];
int above,
@@ -1548,7 +1546,7 @@ pack_incoming_pages(FSMPageData *newLocation, int newPages,
MemSet(histogram, 0, sizeof(histogram));
for (i = 0; i < nPages; i++)
{
- Size avail = pageSpaces[i].avail;
+ Size avail = FSMPageGetSpace(&pageSpaces[i]);
if (avail >= BLCKSZ)
elog(ERROR, "bogus freespace amount");
@@ -1572,18 +1570,17 @@ pack_incoming_pages(FSMPageData *newLocation, int newPages,
/* And copy the appropriate data */
for (i = 0; i < nPages; i++)
{
- BlockNumber page = pageSpaces[i].blkno;
- Size avail = pageSpaces[i].avail;
+ BlockNumber page = FSMPageGetPageNum(&pageSpaces[i]);
+ Size avail = FSMPageGetSpace(&pageSpaces[i]);
/* Check caller provides sorted data */
- if (i > 0 && page <= pageSpaces[i - 1].blkno)
+ if (i > 0 && page <= FSMPageGetPageNum(&pageSpaces[i - 1]))
elog(ERROR, "free-space data is not in page order");
/* Save this page? */
if (avail >= thresholdU ||
(avail >= thresholdL && (--binct >= 0)))
{
- FSMPageSetPageNum(newLocation, page);
- FSMPageSetSpace(newLocation, avail);
+ *newLocation = pageSpaces[i];
newLocation++;
newPages--;
}