aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2008-08-05 15:09:04 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2008-08-05 15:09:04 +0000
commitd8b04d5fac574d96252230c39a16f651b185661f (patch)
treebedf6816f09db907d50c0d2d1653127d1bb8e3c3 /src
parent70d756970b7b2e93e6f807f5c55e2ad7727e212a (diff)
downloadpostgresql-d8b04d5fac574d96252230c39a16f651b185661f.tar.gz
postgresql-d8b04d5fac574d96252230c39a16f651b185661f.zip
In ReadOrZeroBuffer (and related entry points), don't bother to call
PageHeaderIsValid when we zero the buffer instead of reading the page in. The actual performance improvement is probably marginal since this function isn't very heavily used, but a cycle saved is a cycle earned. Zdenek Kotala
Diffstat (limited to 'src')
-rw-r--r--src/backend/storage/buffer/bufmgr.c43
1 files changed, 23 insertions, 20 deletions
diff --git a/src/backend/storage/buffer/bufmgr.c b/src/backend/storage/buffer/bufmgr.c
index e40a815b5dd..456dc423360 100644
--- a/src/backend/storage/buffer/bufmgr.c
+++ b/src/backend/storage/buffer/bufmgr.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/storage/buffer/bufmgr.c,v 1.235 2008/08/01 13:16:08 alvherre Exp $
+ * $PostgreSQL: pgsql/src/backend/storage/buffer/bufmgr.c,v 1.236 2008/08/05 15:09:04 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -352,28 +352,31 @@ ReadBuffer_common(SMgrRelation smgr, bool isLocalBuf, BlockNumber blockNum,
if (zeroPage)
MemSet((char *) bufBlock, 0, BLCKSZ);
else
- smgrread(smgr, blockNum, (char *) bufBlock);
- /* check for garbage data */
- if (!PageHeaderIsValid((PageHeader) bufBlock))
{
- if (zero_damaged_pages)
+ smgrread(smgr, blockNum, (char *) bufBlock);
+
+ /* check for garbage data */
+ if (!PageHeaderIsValid((PageHeader) bufBlock))
{
- ereport(WARNING,
- (errcode(ERRCODE_DATA_CORRUPTED),
- errmsg("invalid page header in block %u of relation %u/%u/%u; zeroing out page",
- blockNum,
- smgr->smgr_rnode.spcNode,
- smgr->smgr_rnode.dbNode,
- smgr->smgr_rnode.relNode)));
- MemSet((char *) bufBlock, 0, BLCKSZ);
+ if (zero_damaged_pages)
+ {
+ ereport(WARNING,
+ (errcode(ERRCODE_DATA_CORRUPTED),
+ errmsg("invalid page header in block %u of relation %u/%u/%u; zeroing out page",
+ blockNum,
+ smgr->smgr_rnode.spcNode,
+ smgr->smgr_rnode.dbNode,
+ smgr->smgr_rnode.relNode)));
+ MemSet((char *) bufBlock, 0, BLCKSZ);
+ }
+ else
+ ereport(ERROR,
+ (errcode(ERRCODE_DATA_CORRUPTED),
+ errmsg("invalid page header in block %u of relation %u/%u/%u",
+ blockNum, smgr->smgr_rnode.spcNode,
+ smgr->smgr_rnode.dbNode,
+ smgr->smgr_rnode.relNode)));
}
- else
- ereport(ERROR,
- (errcode(ERRCODE_DATA_CORRUPTED),
- errmsg("invalid page header in block %u of relation %u/%u/%u",
- blockNum, smgr->smgr_rnode.spcNode,
- smgr->smgr_rnode.dbNode,
- smgr->smgr_rnode.relNode)));
}
}