Talk About Network

Google


Register and Login
Nick
Password
Register create new account Sign up is FREE and you can post replies, new topics, bookmark posts and more!
Recover lost password


Data Bases > Pgsql Patches > Re: page macros...
Latest [ Topics | Posts ] Archive Post A New Topic Post a Reply
<< Topic < Post Post 19 of 26 Topic 3804 of 4084
Post > Topic >>

Re: page macros cleanup (ver 04)

by Zdenek.Kotala@[EMAIL PROTECTED] (Zdenek Kotala) Jul 4, 2008 at 02:11 PM

This is a multi-part message in MIME format.

--Boundary_(ID_sN+JdXmPFPMXJNy8e0So/A)
Content-type: text/plain; format=flowed; charset=ISO-8859-1
Content-transfer-encoding: 7BIT

Pavan Deolasee napsal(a):
> On Fri, Jul 4, 2008 at 4:25 PM, Heikki Lin****angas
> <heikki@[EMAIL PROTECTED]
> wrote:
>>
>> No, there's a itemsz = MAXALIGN(itemsz) call before the check against
>> HashMaxItemSize.
>>
> 
> Ah, right. Still should we just not MAXALIGN_DOWN the Max size to
> reflect the practical limit on the itemsz ? It's more academical
> though, so not a big deal.

Finally I use following formula:

#define HashMaxItemSize(page) \
  	MAXALIGN_DOWN(PageGetPageSize(page) - \
  	  ( SizeOfPageHeaderData + sizeof(ItemIdData) ) - \
  	   MAXALIGN(sizeof(HashPageOpaqueData)) )


I did not replace PageGetPageSize(page), because other *MaxItemSize has
same 
interface.

Revised patch is attached.

		Zdenek

-- 
Zdenek Kotala              Sun Microsystems
Prague, Czech Republic     http://sun.com/postgresql


--Boundary_(ID_sN+JdXmPFPMXJNy8e0So/A)
Content-type: text/x-patch; name=page_04.patch
Content-transfer-encoding: 8BIT
Content-disposition: inline; filename=page_04.patch

diff -cr pgsql.orig.da8c485e0e2a/src/backend/access/gist/gistutil.c
pgsql.orig/src/backend/access/gist/gistutil.c
*** pgsql.orig.da8c485e0e2a/src/backend/access/gist/gistutil.c	pá črc  4
14:04:20 2008
--- pgsql.orig/src/backend/access/gist/gistutil.c	pá črc  4 14:04:20
2008
***************
*** 592,599 ****
  	/*
  	 * Additionally check that the special area looks sane.
  	 */
! 	if (((PageHeader) (page))->pd_special !=
! 		(BLCKSZ - MAXALIGN(sizeof(GISTPageOpaqueData))))
  		ere****t(ERROR,
  				(errcode(ERRCODE_INDEX_CORRUPTED),
  				 errmsg("index \"%s\" contains corrupted page at block %u",
--- 592,598 ----
  	/*
  	 * Additionally check that the special area looks sane.
  	 */
! 	if ( PageGetSpecialSize(page) != MAXALIGN(sizeof(GISTPageOpaqueData)))
  		ere****t(ERROR,
  				(errcode(ERRCODE_INDEX_CORRUPTED),
  				 errmsg("index \"%s\" contains corrupted page at block %u",
diff -cr pgsql.orig.da8c485e0e2a/src/backend/access/hash/hashpage.c
pgsql.orig/src/backend/access/hash/hashpage.c
*** pgsql.orig.da8c485e0e2a/src/backend/access/hash/hashpage.c	pá črc  4
14:04:20 2008
--- pgsql.orig/src/backend/access/hash/hashpage.c	pá črc  4 14:04:20
2008
***************
*** 407,413 ****
  	for (i = _hash_log2(metap->hashm_bsize); i > 0; --i)
  	{
  		if ((1 << i) <= (metap->hashm_bsize -
! 						 (MAXALIGN(sizeof(PageHeaderData)) +
  						  MAXALIGN(sizeof(HashPageOpaqueData)))))
  			break;
  	}
--- 407,413 ----
  	for (i = _hash_log2(metap->hashm_bsize); i > 0; --i)
  	{
  		if ((1 << i) <= (metap->hashm_bsize -
! 						 (MAXALIGN(SizeOfPageHeaderData) +
  						  MAXALIGN(sizeof(HashPageOpaqueData)))))
  			break;
  	}
diff -cr pgsql.orig.da8c485e0e2a/src/backend/access/hash/hashutil.c
pgsql.orig/src/backend/access/hash/hashutil.c
*** pgsql.orig.da8c485e0e2a/src/backend/access/hash/hashutil.c	pá črc  4
14:04:20 2008
--- pgsql.orig/src/backend/access/hash/hashutil.c	pá črc  4 14:04:20
2008
***************
*** 164,171 ****
  	/*
  	 * Additionally check that the special area looks sane.
  	 */
! 	if (((PageHeader) (page))->pd_special !=
! 		(BLCKSZ - MAXALIGN(sizeof(HashPageOpaqueData))))
  		ere****t(ERROR,
  				(errcode(ERRCODE_INDEX_CORRUPTED),
  				 errmsg("index \"%s\" contains corrupted page at block %u",
--- 164,170 ----
  	/*
  	 * Additionally check that the special area looks sane.
  	 */
! 	if ( PageGetSpecialSize(page) != MAXALIGN(sizeof(HashPageOpaqueData)))
  		ere****t(ERROR,
  				(errcode(ERRCODE_INDEX_CORRUPTED),
  				 errmsg("index \"%s\" contains corrupted page at block %u",
diff -cr pgsql.orig.da8c485e0e2a/src/backend/access/heap/heapam.c
pgsql.orig/src/backend/access/heap/heapam.c
*** pgsql.orig.da8c485e0e2a/src/backend/access/heap/heapam.c	pá črc  4
14:04:20 2008
--- pgsql.orig/src/backend/access/heap/heapam.c	pá črc  4 14:04:20 2008
***************
*** 1342,1348 ****
  	ItemPointer tid = &(tuple->t_self);
  	ItemId		lp;
  	Buffer		buffer;
! 	PageHeader	dp;
  	OffsetNumber offnum;
  	bool		valid;
  
--- 1342,1348 ----
  	ItemPointer tid = &(tuple->t_self);
  	ItemId		lp;
  	Buffer		buffer;
! 	Page		page;
  	OffsetNumber offnum;
  	bool		valid;
  
***************
*** 1355,1361 ****
  	 * Need share lock on buffer to examine tuple commit status.
  	 */
  	LockBuffer(buffer, BUFFER_LOCK_SHARE);
! 	dp = (PageHeader) BufferGetPage(buffer);
  
  	/*
  	 * We'd better check for out-of-range offnum in case of VACUUM since
the
--- 1355,1361 ----
  	 * Need share lock on buffer to examine tuple commit status.
  	 */
  	LockBuffer(buffer, BUFFER_LOCK_SHARE);
! 	page = BufferGetPage(buffer);
  
  	/*
  	 * We'd better check for out-of-range offnum in case of VACUUM since
the
***************
*** 1362,1368 ****
  	 * TID was obtained.
  	 */
  	offnum = ItemPointerGetOffsetNumber(tid);
! 	if (offnum < FirstOffsetNumber || offnum > PageGetMaxOffsetNumber(dp))
  	{
  		LockBuffer(buffer, BUFFER_LOCK_UNLOCK);
  		if (keep_buf)
--- 1362,1368 ----
  	 * TID was obtained.
  	 */
  	offnum = ItemPointerGetOffsetNumber(tid);
! 	if (offnum < FirstOffsetNumber || offnum >
PageGetMaxOffsetNumber(page))
  	{
  		LockBuffer(buffer, BUFFER_LOCK_UNLOCK);
  		if (keep_buf)
***************
*** 1379,1385 ****
  	/*
  	 * get the item line pointer corresponding to the requested tid
  	 */
! 	lp = PageGetItemId(dp, offnum);
  
  	/*
  	 * Must check for deleted tuple.
--- 1379,1385 ----
  	/*
  	 * get the item line pointer corresponding to the requested tid
  	 */
! 	lp = PageGetItemId(page, offnum);
  
  	/*
  	 * Must check for deleted tuple.
***************
*** 1401,1407 ****
  	/*
  	 * fill in *tuple fields
  	 */
! 	tuple->t_data = (HeapTupleHeader) PageGetItem((Page) dp, lp);
  	tuple->t_len = ItemIdGetLength(lp);
  	tuple->t_tableOid = RelationGetRelid(relation);
  
--- 1401,1407 ----
  	/*
  	 * fill in *tuple fields
  	 */
! 	tuple->t_data = (HeapTupleHeader) PageGetItem(page, lp);
  	tuple->t_len = ItemIdGetLength(lp);
  	tuple->t_tableOid = RelationGetRelid(relation);
  
***************
*** 1626,1632 ****
  	for (;;)
  	{
  		Buffer		buffer;
! 		PageHeader	dp;
  		OffsetNumber offnum;
  		ItemId		lp;
  		HeapTupleData tp;
--- 1626,1632 ----
  	for (;;)
  	{
  		Buffer		buffer;
! 		Page		page;
  		OffsetNumber offnum;
  		ItemId		lp;
  		HeapTupleData tp;
***************
*** 1637,1643 ****
  		 */
  		buffer = ReadBuffer(relation, ItemPointerGetBlockNumber(&ctid));
  		LockBuffer(buffer, BUFFER_LOCK_SHARE);
! 		dp = (PageHeader) BufferGetPage(buffer);
  
  		/*
  		 * Check for bogus item number.  This is not treated as an error
--- 1637,1643 ----
  		 */
  		buffer = ReadBuffer(relation, ItemPointerGetBlockNumber(&ctid));
  		LockBuffer(buffer, BUFFER_LOCK_SHARE);
! 		page = BufferGetPage(buffer);
  
  		/*
  		 * Check for bogus item number.  This is not treated as an error
***************
*** 1645,1656 ****
  		 * just assume that the prior tid is OK and return it unchanged.
  		 */
  		offnum = ItemPointerGetOffsetNumber(&ctid);
! 		if (offnum < FirstOffsetNumber || offnum > PageGetMaxOffsetNumber(dp))
  		{
  			UnlockReleaseBuffer(buffer);
  			break;
  		}
! 		lp = PageGetItemId(dp, offnum);
  		if (!ItemIdIsNormal(lp))
  		{
  			UnlockReleaseBuffer(buffer);
--- 1645,1656 ----
  		 * just assume that the prior tid is OK and return it unchanged.
  		 */
  		offnum = ItemPointerGetOffsetNumber(&ctid);
! 		if (offnum < FirstOffsetNumber || offnum >
PageGetMaxOffsetNumber(page))
  		{
  			UnlockReleaseBuffer(buffer);
  			break;
  		}
! 		lp = PageGetItemId(page, offnum);
  		if (!ItemIdIsNormal(lp))
  		{
  			UnlockReleaseBuffer(buffer);
***************
*** 1659,1665 ****
  
  		/* OK to access the tuple */
  		tp.t_self = ctid;
! 		tp.t_data = (HeapTupleHeader) PageGetItem(dp, lp);
  		tp.t_len = ItemIdGetLength(lp);
  
  		/*
--- 1659,1665 ----
  
  		/* OK to access the tuple */
  		tp.t_self = ctid;
! 		tp.t_data = (HeapTupleHeader) PageGetItem(page, lp);
  		tp.t_len = ItemIdGetLength(lp);
  
  		/*
***************
*** 1963,1969 ****
  	TransactionId xid = GetCurrentTransactionId();
  	ItemId		lp;
  	HeapTupleData tp;
! 	PageHeader	dp;
  	Buffer		buffer;
  	bool		have_tuple_lock = false;
  	bool		iscombo;
--- 1963,1969 ----
  	TransactionId xid = GetCurrentTransactionId();
  	ItemId		lp;
  	HeapTupleData tp;
! 	Page		page;
  	Buffer		buffer;
  	bool		have_tuple_lock = false;
  	bool		iscombo;
***************
*** 1973,1983 ****
  	buffer = ReadBuffer(relation, ItemPointerGetBlockNumber(tid));
  	LockBuffer(buffer, BUFFER_LOCK_EXCLUSIVE);
  
! 	dp = (PageHeader) BufferGetPage(buffer);
! 	lp = PageGetItemId(dp, ItemPointerGetOffsetNumber(tid));
  	Assert(ItemIdIsNormal(lp));
  
! 	tp.t_data = (HeapTupleHeader) PageGetItem(dp, lp);
  	tp.t_len = ItemIdGetLength(lp);
  	tp.t_self = *tid;
  
--- 1973,1983 ----
  	buffer = ReadBuffer(relation, ItemPointerGetBlockNumber(tid));
  	LockBuffer(buffer, BUFFER_LOCK_EXCLUSIVE);
  
! 	page = BufferGetPage(buffer);
! 	lp = PageGetItemId(page, ItemPointerGetOffsetNumber(tid));
  	Assert(ItemIdIsNormal(lp));
  
! 	tp.t_data = (HeapTupleHeader) PageGetItem(page, lp);
  	tp.t_len = ItemIdGetLength(lp);
  	tp.t_self = *tid;
  
***************
*** 2111,2117 ****
  	 * the subsequent page pruning will be a no-op and the hint will be
  	 * cleared.
  	 */
! 	PageSetPrunable(dp, xid);
  
  	/* store transaction information of xact deleting the tuple */
  	tp.t_data->t_infomask &= ~(HEAP_XMAX_COMMITTED |
--- 2111,2117 ----
  	 * the subsequent page pruning will be a no-op and the hint will be
  	 * cleared.
  	 */
! 	PageSetPrunable(page, xid);
  
  	/* store transaction information of xact deleting the tuple */
  	tp.t_data->t_infomask &= ~(HEAP_XMAX_COMMITTED |
***************
*** 2149,2156 ****
  
  		recptr = XLogInsert(RM_HEAP_ID, XLOG_HEAP_DELETE, rdata);
  
! 		PageSetLSN(dp, recptr);
! 		PageSetTLI(dp, ThisTimeLineID);
  	}
  
  	END_CRIT_SECTION();
--- 2149,2156 ----
  
  		recptr = XLogInsert(RM_HEAP_ID, XLOG_HEAP_DELETE, rdata);
  
! 		PageSetLSN(page, recptr);
! 		PageSetTLI(page, ThisTimeLineID);
  	}
  
  	END_CRIT_SECTION();
***************
*** 2275,2281 ****
  	ItemId		lp;
  	HeapTupleData oldtup;
  	HeapTuple	heaptup;
! 	PageHeader	dp;
  	Buffer		buffer,
  				newbuf;
  	bool		need_toast,
--- 2275,2281 ----
  	ItemId		lp;
  	HeapTupleData oldtup;
  	HeapTuple	heaptup;
! 	Page		page;
  	Buffer		buffer,
  				newbuf;
  	bool		need_toast,
***************
*** 2305,2315 ****
  	buffer = ReadBuffer(relation, ItemPointerGetBlockNumber(otid));
  	LockBuffer(buffer, BUFFER_LOCK_EXCLUSIVE);
  
! 	dp = (PageHeader) BufferGetPage(buffer);
! 	lp = PageGetItemId(dp, ItemPointerGetOffsetNumber(otid));
  	Assert(ItemIdIsNormal(lp));
  
! 	oldtup.t_data = (HeapTupleHeader) PageGetItem(dp, lp);
  	oldtup.t_len = ItemIdGetLength(lp);
  	oldtup.t_self = *otid;
  
--- 2305,2315 ----
  	buffer = ReadBuffer(relation, ItemPointerGetBlockNumber(otid));
  	LockBuffer(buffer, BUFFER_LOCK_EXCLUSIVE);
  
! 	page = BufferGetPage(buffer);
! 	lp = PageGetItemId(page, ItemPointerGetOffsetNumber(otid));
  	Assert(ItemIdIsNormal(lp));
  
! 	oldtup.t_data = (HeapTupleHeader) PageGetItem(page, lp);
  	oldtup.t_len = ItemIdGetLength(lp);
  	oldtup.t_self = *otid;
  
***************
*** 2490,2496 ****
  					  HeapTupleHa***ternal(newtup) ||
  					  newtup->t_len > TOAST_TUPLE_THRESHOLD);
  
! 	pagefree = PageGetHeapFreeSpace((Page) dp);
  
  	newtupsize = MAXALIGN(newtup->t_len);
  
--- 2490,2496 ----
  					  HeapTupleHa***ternal(newtup) ||
  					  newtup->t_len > TOAST_TUPLE_THRESHOLD);
  
! 	pagefree = PageGetHeapFreeSpace(page);
  
  	newtupsize = MAXALIGN(newtup->t_len);
  
***************
*** 2556,2562 ****
  			/* Re-acquire the lock on the old tuple's page. */
  			LockBuffer(buffer, BUFFER_LOCK_EXCLUSIVE);
  			/* Re-check using the up-to-date free space */
! 			pagefree = PageGetHeapFreeSpace((Page) dp);
  			if (newtupsize > pagefree)
  			{
  				/*
--- 2556,2562 ----
  			/* Re-acquire the lock on the old tuple's page. */
  			LockBuffer(buffer, BUFFER_LOCK_EXCLUSIVE);
  			/* Re-check using the up-to-date free space */
! 			pagefree = PageGetHeapFreeSpace(page);
  			if (newtupsize > pagefree)
  			{
  				/*
***************
*** 2602,2608 ****
  	else
  	{
  		/* Set a hint that the old page could use prune/defrag */
! 		PageSetFull(dp);
  	}
  
  	/* NO ERE****T(ERROR) from here till changes are logged */
--- 2602,2608 ----
  	else
  	{
  		/* Set a hint that the old page could use prune/defrag */
! 		PageSetFull(page);
  	}
  
  	/* NO ERE****T(ERROR) from here till changes are logged */
***************
*** 2620,2626 ****
  	 * not to optimize for aborts.	Note that heap_xlog_update must be kept
in
  	 * sync if this decision changes.
  	 */
! 	PageSetPrunable(dp, xid);
  
  	if (use_hot_update)
  	{
--- 2620,2626 ----
  	 * not to optimize for aborts.	Note that heap_xlog_update must be kept
in
  	 * sync if this decision changes.
  	 */
! 	PageSetPrunable(page, xid);
  
  	if (use_hot_update)
  	{
***************
*** 2945,2951 ****
  	HTSU_Result result;
  	ItemPointer tid = &(tuple->t_self);
  	ItemId		lp;
! 	PageHeader	dp;
  	TransactionId xid;
  	TransactionId xmax;
  	uint16		old_infomask;
--- 2945,2951 ----
  	HTSU_Result result;
  	ItemPointer tid = &(tuple->t_self);
  	ItemId		lp;
! 	Page		page;
  	TransactionId xid;
  	TransactionId xmax;
  	uint16		old_infomask;
***************
*** 2958,2968 ****
  	*buffer = ReadBuffer(relation, ItemPointerGetBlockNumber(tid));
  	LockBuffer(*buffer, BUFFER_LOCK_EXCLUSIVE);
  
! 	dp = (PageHeader) BufferGetPage(*buffer);
! 	lp = PageGetItemId(dp, ItemPointerGetOffsetNumber(tid));
  	Assert(ItemIdIsNormal(lp));
  
! 	tuple->t_data = (HeapTupleHeader) PageGetItem((Page) dp, lp);
  	tuple->t_len = ItemIdGetLength(lp);
  	tuple->t_tableOid = RelationGetRelid(relation);
  
--- 2958,2968 ----
  	*buffer = ReadBuffer(relation, ItemPointerGetBlockNumber(tid));
  	LockBuffer(*buffer, BUFFER_LOCK_EXCLUSIVE);
  
! 	page = BufferGetPage(*buffer);
! 	lp = PageGetItemId(page, ItemPointerGetOffsetNumber(tid));
  	Assert(ItemIdIsNormal(lp));
  
! 	tuple->t_data = (HeapTupleHeader) PageGetItem(page, lp);
  	tuple->t_len = ItemIdGetLength(lp);
  	tuple->t_tableOid = RelationGetRelid(relation);
  
***************
*** 3301,3308 ****
  
  		recptr = XLogInsert(RM_HEAP_ID, XLOG_HEAP_LOCK, rdata);
  
! 		PageSetLSN(dp, recptr);
! 		PageSetTLI(dp, ThisTimeLineID);
  	}
  
  	END_CRIT_SECTION();
--- 3301,3308 ----
  
  		recptr = XLogInsert(RM_HEAP_ID, XLOG_HEAP_LOCK, rdata);
  
! 		PageSetLSN(page, recptr);
! 		PageSetTLI(page, ThisTimeLineID);
  	}
  
  	END_CRIT_SECTION();
diff -cr pgsql.orig.da8c485e0e2a/src/backend/access/heap/hio.c
pgsql.orig/src/backend/access/heap/hio.c
*** pgsql.orig.da8c485e0e2a/src/backend/access/heap/hio.c	pá črc  4
14:04:20 2008
--- pgsql.orig/src/backend/access/heap/hio.c	pá črc  4 14:04:20 2008
***************
*** 107,113 ****
  						  Buffer otherBuffer, bool use_fsm)
  {
  	Buffer		buffer = InvalidBuffer;
! 	Page		pageHeader;
  	Size		pageFreeSpace,
  				saveFreeSpace;
  	BlockNumber targetBlock,
--- 107,113 ----
  						  Buffer otherBuffer, bool use_fsm)
  {
  	Buffer		buffer = InvalidBuffer;
! 	Page		page;
  	Size		pageFreeSpace,
  				saveFreeSpace;
  	BlockNumber targetBlock,
***************
*** 218,225 ****
  		 * Now we can check to see if there's enough free space here. If so,
  		 * we're done.
  		 */
! 		pageHeader = (Page) BufferGetPage(buffer);
! 		pageFreeSpace = PageGetHeapFreeSpace(pageHeader);
  		if (len + saveFreeSpace <= pageFreeSpace)
  		{
  			/* use this page as future insert target, too */
--- 218,225 ----
  		 * Now we can check to see if there's enough free space here. If so,
  		 * we're done.
  		 */
! 		page = BufferGetPage(buffer);
! 		pageFreeSpace = PageGetHeapFreeSpace(page);
  		if (len + saveFreeSpace <= pageFreeSpace)
  		{
  			/* use this page as future insert target, too */
***************
*** 303,318 ****
  	 * is empty (this should never happen, but if it does we don't want to
  	 * risk wiping out valid data).
  	 */
! 	pageHeader = (Page) BufferGetPage(buffer);
  
! 	if (!PageIsNew((PageHeader) pageHeader))
  		elog(ERROR, "page %u of relation \"%s\" should be empty but is not",
  			 BufferGetBlockNumber(buffer),
  			 RelationGetRelationName(relation));
  
! 	PageInit(pageHeader, BufferGetPageSize(buffer), 0);
  
! 	if (len > PageGetHeapFreeSpace(pageHeader))
  	{
  		/* We should not get here given the test at the top */
  		elog(PANIC, "tuple is too big: size %lu", (unsigned long) len);
--- 303,318 ----
  	 * is empty (this should never happen, but if it does we don't want to
  	 * risk wiping out valid data).
  	 */
! 	page = BufferGetPage(buffer);
  
! 	if (!PageIsNew(page))
  		elog(ERROR, "page %u of relation \"%s\" should be empty but is not",
  			 BufferGetBlockNumber(buffer),
  			 RelationGetRelationName(relation));
  
! 	PageInit(page, BufferGetPageSize(buffer), 0);
  
! 	if (len > PageGetHeapFreeSpace(page))
  	{
  		/* We should not get here given the test at the top */
  		elog(PANIC, "tuple is too big: size %lu", (unsigned long) len);
diff -cr pgsql.orig.da8c485e0e2a/src/backend/access/heap/pruneheap.c
pgsql.orig/src/backend/access/heap/pruneheap.c
*** pgsql.orig.da8c485e0e2a/src/backend/access/heap/pruneheap.c	pá črc 
4 14:04:20 2008
--- pgsql.orig/src/backend/access/heap/pruneheap.c	pá črc  4 14:04:20
2008
***************
*** 71,77 ****
  void
  heap_page_prune_opt(Relation relation, Buffer buffer, TransactionId
OldestXmin)
  {
! 	PageHeader	dp = (PageHeader) BufferGetPage(buffer);
  	Size		minfree;
  
  	/*
--- 71,77 ----
  void
  heap_page_prune_opt(Relation relation, Buffer buffer, TransactionId
OldestXmin)
  {
! 	Page		page = BufferGetPage(buffer);
  	Size		minfree;
  
  	/*
***************
*** 80,86 ****
  	 * Forget it if page is not hinted to contain something prunable that's
  	 * older than OldestXmin.
  	 */
! 	if (!PageIsPrunable(dp, OldestXmin))
  		return;
  
  	/*
--- 80,86 ----
  	 * Forget it if page is not hinted to contain something prunable that's
  	 * older than OldestXmin.
  	 */
! 	if (!PageIsPrunable(page, OldestXmin))
  		return;
  
  	/*
***************
*** 99,105 ****
  											 HEAP_DEFAULT_FILLFACTOR);
  	minfree = Max(minfree, BLCKSZ / 10);
  
! 	if (PageIsFull(dp) || PageGetHeapFreeSpace((Page) dp) < minfree)
  	{
  		/* OK, try to get exclusive buffer lock */
  		if (!ConditionalLockBufferForCleanup(buffer))
--- 99,105 ----
  											 HEAP_DEFAULT_FILLFACTOR);
  	minfree = Max(minfree, BLCKSZ / 10);
  
! 	if (PageIsFull(page) || PageGetHeapFreeSpace(page) < minfree)
  	{
  		/* OK, try to get exclusive buffer lock */
  		if (!ConditionalLockBufferForCleanup(buffer))
***************
*** 111,117 ****
  		 * prune. (We needn't recheck PageIsPrunable, since no one else could
  		 * have pruned while we hold pin.)
  		 */
! 		if (PageIsFull(dp) || PageGetHeapFreeSpace((Page) dp) < minfree)
  		{
  			/* OK to prune (though not to remove redirects) */
  			(void) heap_page_prune(relation, buffer, OldestXmin, false, true);
--- 111,117 ----
  		 * prune. (We needn't recheck PageIsPrunable, since no one else could
  		 * have pruned while we hold pin.)
  		 */
! 		if (PageIsFull(page) || PageGetHeapFreeSpace(page) < minfree)
  		{
  			/* OK to prune (though not to remove redirects) */
  			(void) heap_page_prune(relation, buffer, OldestXmin, false, true);
diff -cr pgsql.orig.da8c485e0e2a/src/backend/access/nbtree/nbtpage.c
pgsql.orig/src/backend/access/nbtree/nbtpage.c
*** pgsql.orig.da8c485e0e2a/src/backend/access/nbtree/nbtpage.c	pá črc 
4 14:04:20 2008
--- pgsql.orig/src/backend/access/nbtree/nbtpage.c	pá črc  4 14:04:20
2008
***************
*** 436,448 ****
  	/*
  	 * Additionally check that the special area looks sane.
  	 */
! 	if (((PageHeader) (page))->pd_special !=
! 		(BLCKSZ - MAXALIGN(sizeof(BTPageOpaqueData))))
  		ere****t(ERROR,
  				(errcode(ERRCODE_INDEX_CORRUPTED),
  				 errmsg("index \"%s\" contains corrupted page at block %u",
  						RelationGetRelationName(rel),
! 						BufferGetBlockNumber(buf)),
  				 errhint("Please REINDEX it.")));
  }
  
--- 436,447 ----
  	/*
  	 * Additionally check that the special area looks sane.
  	 */
! 	if ( (PageGetSpecialSize(page)) != MAXALIGN(sizeof(BTPageOpaqueData)))
  		ere****t(ERROR,
  				(errcode(ERRCODE_INDEX_CORRUPTED),
  				 errmsg("index \"%s\" contains corrupted page at block %u",
  						RelationGetRelationName(rel),
! 						BufferGetBlockNumber(buf)), 
  				 errhint("Please REINDEX it.")));
  }
  
***************
*** 555,561 ****
  
  		/* Initialize the new page before returning it */
  		page = BufferGetPage(buf);
! 		Assert(PageIsNew((PageHeader) page));
  		_bt_pageinit(page, BufferGetPageSize(buf));
  	}
  
--- 554,560 ----
  
  		/* Initialize the new page before returning it */
  		page = BufferGetPage(buf);
! 		Assert(PageIsNew(page));
  		_bt_pageinit(page, BufferGetPageSize(buf));
  	}
  
diff -cr pgsql.orig.da8c485e0e2a/src/backend/access/transam/xlog.c
pgsql.orig/src/backend/access/transam/xlog.c
*** pgsql.orig.da8c485e0e2a/src/backend/access/transam/xlog.c	pá črc  4
14:04:20 2008
--- pgsql.orig/src/backend/access/transam/xlog.c	pá črc  4 14:04:20 2008
***************
*** 1017,1025 ****
  XLogCheckBuffer(XLogRecData *rdata, bool doPageWrites,
  				XLogRecPtr *lsn, BkpBlock *bkpb)
  {
! 	PageHeader	page;
  
! 	page = (PageHeader) BufferGetBlock(rdata->buffer);
  
  	/*
  	 * XXX We assume page LSN is first data on *every* page that can be
passed
--- 1017,1025 ----
  XLogCheckBuffer(XLogRecData *rdata, bool doPageWrites,
  				XLogRecPtr *lsn, BkpBlock *bkpb)
  {
! 	Page	page;
  
! 	page = BufferGetBlock(rdata->buffer);
  
  	/*
  	 * XXX We assume page LSN is first data on *every* page that can be
passed
***************
*** 1026,1035 ****
  	 * to XLogInsert, whether it otherwise has the standard page layout or
  	 * not.
  	 */
! 	*lsn = page->pd_lsn;
  
  	if (doPageWrites &&
! 		XLByteLE(page->pd_lsn, RedoRecPtr))
  	{
  		/*
  		 * The page needs to be backed up, so set up *bkpb
--- 1026,1035 ----
  	 * to XLogInsert, whether it otherwise has the standard page layout or
  	 * not.
  	 */
! 	*lsn = PageGetLSN(page);
  
  	if (doPageWrites &&
! 		XLByteLE(PageGetLSN(page), RedoRecPtr))
  	{
  		/*
  		 * The page needs to be backed up, so set up *bkpb
diff -cr pgsql.orig.da8c485e0e2a/src/backend/access/transam/xlogutils.c
pgsql.orig/src/backend/access/transam/xlogutils.c
*** pgsql.orig.da8c485e0e2a/src/backend/access/transam/xlogutils.c	pá
črc  4 14:04:20 2008
--- pgsql.orig/src/backend/access/transam/xlogutils.c	pá črc  4 14:04:20
2008
***************
*** 262,268 ****
  		/* check that page has been initialized */
  		Page		page = (Page) BufferGetPage(buffer);
  
! 		if (PageIsNew((PageHeader) page))
  		{
  			UnlockReleaseBuffer(buffer);
  			log_invalid_page(reln->rd_node, blkno, true);
--- 262,268 ----
  		/* check that page has been initialized */
  		Page		page = (Page) BufferGetPage(buffer);
  
! 		if (PageIsNew(page))
  		{
  			UnlockReleaseBuffer(buffer);
  			log_invalid_page(reln->rd_node, blkno, true);
diff -cr pgsql.orig.da8c485e0e2a/src/backend/commands/sequence.c
pgsql.orig/src/backend/commands/sequence.c
*** pgsql.orig.da8c485e0e2a/src/backend/commands/sequence.c	pá črc  4
14:04:20 2008
--- pgsql.orig/src/backend/commands/sequence.c	pá črc  4 14:04:20 2008
***************
*** 109,115 ****
  	Oid			seqoid;
  	Relation	rel;
  	Buffer		buf;
! 	PageHeader	page;
  	sequence_magic *sm;
  	HeapTuple	tuple;
  	TupleDesc	tupDesc;
--- 109,115 ----
  	Oid			seqoid;
  	Relation	rel;
  	Buffer		buf;
! 	Page		page;
  	sequence_magic *sm;
  	HeapTuple	tuple;
  	TupleDesc	tupDesc;
***************
*** 212,220 ****
  	buf = ReadBuffer(rel, P_NEW);
  	Assert(BufferGetBlockNumber(buf) == 0);
  
! 	page = (PageHeader) BufferGetPage(buf);
  
! 	PageInit((Page) page, BufferGetPageSize(buf), sizeof(sequence_magic));
  	sm = (sequence_magic *) PageGetSpecialPointer(page);
  	sm->magic = SEQ_MAGIC;
  
--- 212,220 ----
  	buf = ReadBuffer(rel, P_NEW);
  	Assert(BufferGetBlockNumber(buf) == 0);
  
! 	page = BufferGetPage(buf);
  
! 	PageInit(page, BufferGetPageSize(buf), sizeof(sequence_magic));
  	sm = (sequence_magic *) PageGetSpecialPointer(page);
  	sm->magic = SEQ_MAGIC;
  
***************
*** 954,960 ****
  static Form_pg_sequence
  read_info(SeqTable elm, Relation rel, Buffer *buf)
  {
! 	PageHeader	page;
  	ItemId		lp;
  	HeapTupleData tuple;
  	sequence_magic *sm;
--- 954,960 ----
  static Form_pg_sequence
  read_info(SeqTable elm, Relation rel, Buffer *buf)
  {
! 	Page	page;
  	ItemId		lp;
  	HeapTupleData tuple;
  	sequence_magic *sm;
***************
*** 963,969 ****
  	*buf = ReadBuffer(rel, 0);
  	LockBuffer(*buf, BUFFER_LOCK_EXCLUSIVE);
  
! 	page = (PageHeader) BufferGetPage(*buf);
  	sm = (sequence_magic *) PageGetSpecialPointer(page);
  
  	if (sm->magic != SEQ_MAGIC)
--- 963,969 ----
  	*buf = ReadBuffer(rel, 0);
  	LockBuffer(*buf, BUFFER_LOCK_EXCLUSIVE);
  
! 	page = BufferGetPage(*buf);
  	sm = (sequence_magic *) PageGetSpecialPointer(page);
  
  	if (sm->magic != SEQ_MAGIC)
***************
*** 972,978 ****
  
  	lp = PageGetItemId(page, FirstOffsetNumber);
  	Assert(ItemIdIsNormal(lp));
! 	tuple.t_data = (HeapTupleHeader) PageGetItem((Page) page, lp);
  
  	seq = (Form_pg_sequence) GETSTRUCT(&tuple);
  
--- 972,978 ----
  
  	lp = PageGetItemId(page, FirstOffsetNumber);
  	Assert(ItemIdIsNormal(lp));
! 	tuple.t_data = (HeapTupleHeader) PageGetItem(page, lp);
  
  	seq = (Form_pg_sequence) GETSTRUCT(&tuple);
  
diff -cr pgsql.orig.da8c485e0e2a/src/backend/commands/trigger.c
pgsql.orig/src/backend/commands/trigger.c
*** pgsql.orig.da8c485e0e2a/src/backend/commands/trigger.c	pá črc  4
14:04:20 2008
--- pgsql.orig/src/backend/commands/trigger.c	pá črc  4 14:04:20 2008
***************
*** 2203,2219 ****
  	}
  	else
  	{
! 		PageHeader	dp;
  		ItemId		lp;
  
  		buffer = ReadBuffer(relation, ItemPointerGetBlockNumber(tid));
  
! 		dp = (PageHeader) BufferGetPage(buffer);
! 		lp = PageGetItemId(dp, ItemPointerGetOffsetNumber(tid));
  
  		Assert(ItemIdIsNormal(lp));
  
! 		tuple.t_data = (HeapTupleHeader) PageGetItem((Page) dp, lp);
  		tuple.t_len = ItemIdGetLength(lp);
  		tuple.t_self = *tid;
  		tuple.t_tableOid = RelationGetRelid(relation);
--- 2203,2219 ----
  	}
  	else
  	{
! 		Page		page;
  		ItemId		lp;
  
  		buffer = ReadBuffer(relation, ItemPointerGetBlockNumber(tid));
  
! 		page = BufferGetPage(buffer);
! 		lp = PageGetItemId(page, ItemPointerGetOffsetNumber(tid));
  
  		Assert(ItemIdIsNormal(lp));
  
! 		tuple.t_data = (HeapTupleHeader) PageGetItem(page, lp);
  		tuple.t_len = ItemIdGetLength(lp);
  		tuple.t_self = *tid;
  		tuple.t_tableOid = RelationGetRelid(relation);
diff -cr pgsql.orig.da8c485e0e2a/src/backend/optimizer/util/plancat.c
pgsql.orig/src/backend/optimizer/util/plancat.c
*** pgsql.orig.da8c485e0e2a/src/backend/optimizer/util/plancat.c	pá črc 
4 14:04:20 2008
--- pgsql.orig/src/backend/optimizer/util/plancat.c	pá črc  4 14:04:20
2008
***************
*** 429,435 ****
  				tuple_width += sizeof(HeapTupleHeaderData);
  				tuple_width += sizeof(ItemPointerData);
  				/* note: integer division is intentional here */
! 				density = (BLCKSZ - sizeof(PageHeaderData)) / tuple_width;
  			}
  			*tuples = rint(density * (double) curpages);
  			break;
--- 429,435 ----
  				tuple_width += sizeof(HeapTupleHeaderData);
  				tuple_width += sizeof(ItemPointerData);
  				/* note: integer division is intentional here */
! 				density = (BLCKSZ - SizeOfPageHeaderData) / tuple_width;
  			}
  			*tuples = rint(density * (double) curpages);
  			break;
diff -cr pgsql.orig.da8c485e0e2a/src/backend/storage/buffer/bufmgr.c
pgsql.orig/src/backend/storage/buffer/bufmgr.c
*** pgsql.orig.da8c485e0e2a/src/backend/storage/buffer/bufmgr.c	pá črc 
4 14:04:20 2008
--- pgsql.orig/src/backend/storage/buffer/bufmgr.c	pá črc  4 14:04:20
2008
***************
*** 223,229 ****
  		 * always have left a zero-filled buffer, complain if not PageIsNew.
  		 */
  		bufBlock = isLocalBuf ? LocalBufHdrGetBlock(bufHdr) :
BufHdrGetBlock(bufHdr);
! 		if (!PageIsNew((PageHeader) bufBlock))
  			ere****t(ERROR,
  					(errmsg("unexpected data beyond EOF in block %u of relation
\"%s\"",
  							blockNum, RelationGetRelationName(reln)),
--- 223,229 ----
  		 * always have left a zero-filled buffer, complain if not PageIsNew.
  		 */
  		bufBlock = isLocalBuf ? LocalBufHdrGetBlock(bufHdr) :
BufHdrGetBlock(bufHdr);
! 		if (!PageIsNew((Page) bufBlock))
  			ere****t(ERROR,
  					(errmsg("unexpected data beyond EOF in block %u of relation
\"%s\"",
  							blockNum, RelationGetRelationName(reln)),
***************
*** 292,298 ****
  		else
  			smgrread(reln->rd_smgr, blockNum, (char *) bufBlock);
  		/* check for garbage data */
! 		if (!PageHeaderIsValid((PageHeader) bufBlock))
  		{
  			if (zero_damaged_pages)
  			{
--- 292,298 ----
  		else
  			smgrread(reln->rd_smgr, blockNum, (char *) bufBlock);
  		/* check for garbage data */
! 		if (!PageHeaderIsValid((Page) bufBlock))
  		{
  			if (zero_damaged_pages)
  			{
diff -cr pgsql.orig.da8c485e0e2a/src/include/access/hash.h
pgsql.orig/src/include/access/hash.h
*** pgsql.orig.da8c485e0e2a/src/include/access/hash.h	pá črc  4 14:04:20
2008
--- pgsql.orig/src/include/access/hash.h	pá črc  4 14:04:20 2008
***************
*** 165,174 ****
   * Maximum size of a hash index item (it's okay to have only one per
page)
   */
  #define HashMaxItemSize(page) \
! 	(PageGetPageSize(page) - \
! 	 sizeof(PageHeaderData) - \
! 	 MAXALIGN(sizeof(HashPageOpaqueData)) - \
! 	 sizeof(ItemIdData))
  
  #define HASH_MIN_FILLFACTOR			10
  #define HASH_DEFAULT_FILLFACTOR		75
--- 165,173 ----
   * Maximum size of a hash index item (it's okay to have only one per
page)
   */
  #define HashMaxItemSize(page) \
! 	MAXALIGN_DOWN(PageGetPageSize(page) - \
! 	  ( SizeOfPageHeaderData + sizeof(ItemIdData) ) - \
! 	   MAXALIGN(sizeof(HashPageOpaqueData)) )
  
  #define HASH_MIN_FILLFACTOR			10
  #define HASH_DEFAULT_FILLFACTOR		75
***************
*** 191,197 ****
  #define BMPG_****FT(metap)		((metap)->hashm_bm****ft)
  #define BMPG_MASK(metap)		(BMPGSZ_BIT(metap) - 1)
  #define HashPageGetBitmap(pg) \
! 	((uint32 *) (((char *) (pg)) + MAXALIGN(sizeof(PageHeaderData))))
  
  /*
   * The number of bits in an ovflpage bitmap word.
--- 190,196 ----
  #define BMPG_****FT(metap)		((metap)->hashm_bm****ft)
  #define BMPG_MASK(metap)		(BMPGSZ_BIT(metap) - 1)
  #define HashPageGetBitmap(pg) \
! 	((uint32 *) (((char *) (pg)) + MAXALIGN(SizeOfPageHeaderData +
sizeof(ItemIdData)))) 
  
  /*
   * The number of bits in an ovflpage bitmap word.
diff -cr pgsql.orig.da8c485e0e2a/src/include/access/htup.h
pgsql.orig/src/include/access/htup.h
*** pgsql.orig.da8c485e0e2a/src/include/access/htup.h	pá črc  4 14:04:20
2008
--- pgsql.orig/src/include/access/htup.h	pá črc  4 14:04:20 2008
***************
*** 367,373 ****
   * of assuming that, say, you can fit 2 tuples of size
MaxHeapTupleSize/2
   * on the same page.
   */
! #define MaxHeapTupleSize  (BLCKSZ - MAXALIGN(sizeof(PageHeaderData)))
  
  /*
   * MaxHeapTuplesPerPage is an upper bound on the number of tuples that
can
--- 367,373 ----
   * of assuming that, say, you can fit 2 tuples of size
MaxHeapTupleSize/2
   * on the same page.
   */
! #define MaxHeapTupleSize  (BLCKSZ - MAXALIGN( (SizeOfPageHeaderData) +
sizeof(ItemIdData)))
  
  /*
   * MaxHeapTuplesPerPage is an upper bound on the number of tuples that
can
***************
*** 381,387 ****
   * require increases in the size of work arrays.
   */
  #define MaxHeapTuplesPerPage	\
! 	((int) ((BLCKSZ - offsetof(PageHeaderData, pd_linp)) / \
  			(MAXALIGN(offsetof(HeapTupleHeaderData, t_bits)) +
sizeof(ItemIdData))))
  
  /*
--- 381,387 ----
   * require increases in the size of work arrays.
   */
  #define MaxHeapTuplesPerPage	\
! 	((int) ((BLCKSZ - SizeOfPageHeaderData) / \
  			(MAXALIGN(offsetof(HeapTupleHeaderData, t_bits)) +
sizeof(ItemIdData))))
  
  /*
diff -cr pgsql.orig.da8c485e0e2a/src/include/access/itup.h
pgsql.orig/src/include/access/itup.h
*** pgsql.orig.da8c485e0e2a/src/include/access/itup.h	pá črc  4 14:04:20
2008
--- pgsql.orig/src/include/access/itup.h	pá črc  4 14:04:20 2008
***************
*** 134,140 ****
   * must be maxaligned, and it must have an associated item pointer.
   */
  #define MaxIndexTuplesPerPage	\
! 	((int) ((BLCKSZ - offsetof(PageHeaderData, pd_linp)) / \
  			(MAXALIGN(sizeof(IndexTupleData) + 1) + sizeof(ItemIdData))))
  
  
--- 134,140 ----
   * must be maxaligned, and it must have an associated item pointer.
   */
  #define MaxIndexTuplesPerPage	\
! 	((int) ((BLCKSZ - SizeOfPageHeaderData) / \
  			(MAXALIGN(sizeof(IndexTupleData) + 1) + sizeof(ItemIdData))))
  
  
diff -cr pgsql.orig.da8c485e0e2a/src/include/access/nbtree.h
pgsql.orig/src/include/access/nbtree.h
*** pgsql.orig.da8c485e0e2a/src/include/access/nbtree.h	pá črc  4
14:04:20 2008
--- pgsql.orig/src/include/access/nbtree.h	pá črc  4 14:04:20 2008
***************
*** 119,125 ****
   */
  #define BTMaxItemSize(page) \
  	MAXALIGN_DOWN((PageGetPageSize(page) - \
! 				   MAXALIGN(sizeof(PageHeaderData) + 2*sizeof(ItemIdData)) - \
  				   MAXALIGN(sizeof(BTPageOpaqueData))) / 3)
  
  /*
--- 119,125 ----
   */
  #define BTMaxItemSize(page) \
  	MAXALIGN_DOWN((PageGetPageSize(page) - \
! 				   MAXALIGN(SizeOfPageHeaderData + 3*sizeof(ItemIdData)) - \
  				   MAXALIGN(sizeof(BTPageOpaqueData))) / 3)
  
  /*
diff -cr pgsql.orig.da8c485e0e2a/src/include/access/tuptoaster.h
pgsql.orig/src/include/access/tuptoaster.h
*** pgsql.orig.da8c485e0e2a/src/include/access/tuptoaster.h	pá črc  4
14:04:20 2008
--- pgsql.orig/src/include/access/tuptoaster.h	pá črc  4 14:04:20 2008
***************
*** 49,55 ****
  /* Note: sizeof(PageHeaderData) includes the first ItemId on the page */
  #define TOAST_TUPLE_THRESHOLD	\
  	MAXALIGN_DOWN((BLCKSZ - \
! 				   MAXALIGN(sizeof(PageHeaderData) + (TOAST_TUPLES_PER_PAGE-1) *
sizeof(ItemIdData))) \
  				  / TOAST_TUPLES_PER_PAGE)
  
  #define TOAST_TUPLE_TARGET		TOAST_TUPLE_THRESHOLD
--- 49,55 ----
  /* Note: sizeof(PageHeaderData) includes the first ItemId on the page */
  #define TOAST_TUPLE_THRESHOLD	\
  	MAXALIGN_DOWN((BLCKSZ - \
! 				   MAXALIGN(SizeOfPageHeaderData + (TOAST_TUPLES_PER_PAGE) *
sizeof(ItemIdData))) \
  				  / TOAST_TUPLES_PER_PAGE)
  
  #define TOAST_TUPLE_TARGET		TOAST_TUPLE_THRESHOLD
***************
*** 76,82 ****
  /* Note: sizeof(PageHeaderData) includes the first ItemId on the page */
  #define EXTERN_TUPLE_MAX_SIZE	\
  	MAXALIGN_DOWN((BLCKSZ - \
! 				   MAXALIGN(sizeof(PageHeaderData) + (EXTERN_TUPLES_PER_PAGE-1) *
sizeof(ItemIdData))) \
  				  / EXTERN_TUPLES_PER_PAGE)
  
  #define TOAST_MAX_CHUNK_SIZE	\
--- 76,82 ----
  /* Note: sizeof(PageHeaderData) includes the first ItemId on the page */
  #define EXTERN_TUPLE_MAX_SIZE	\
  	MAXALIGN_DOWN((BLCKSZ - \
! 				   MAXALIGN(SizeOfPageHeaderData + (EXTERN_TUPLES_PER_PAGE) *
sizeof(ItemIdData))) \
  				  / EXTERN_TUPLES_PER_PAGE)
  
  #define TOAST_MAX_CHUNK_SIZE	\

--Boundary_(ID_sN+JdXmPFPMXJNy8e0So/A)
Content-Type: text/plain
Content-Disposition: inline
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0


-- 
Sent via pgsql-patches mailing list (pgsql-patches@[EMAIL PROTECTED]
)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-patches

--Boundary_(ID_sN+JdXmPFPMXJNy8e0So/A)--
 




 26 Posts in Topic:
page macros cleanup
Zdenek.Kotala@[EMAIL PROT  2008-06-13 18:08:35 
Re: page macros cleanup
pavan.deolasee@[EMAIL PRO  2008-07-03 17:20:52 
Re: page macros cleanup
heikki@[EMAIL PROTECTED]   2008-07-03 17:04:51 
Re: page macros cleanup
Zdenek.Kotala@[EMAIL PROT  2008-07-04 10:38:04 
Re: page macros cleanup
pavan.deolasee@[EMAIL PRO  2008-07-04 14:33:41 
Re: page macros cleanup (ver 03)
Zdenek.Kotala@[EMAIL PROT  2008-07-04 11:57:47 
Re: page macros cleanup
Zdenek.Kotala@[EMAIL PROT  2008-07-04 09:31:29 
Re: page macros cleanup
pavan.deolasee@[EMAIL PRO  2008-07-04 14:20:12 
Re: page macros cleanup
heikki@[EMAIL PROTECTED]   2008-07-04 13:07:00 
Re: page macros cleanup
pavan.deolasee@[EMAIL PRO  2008-07-04 16:20:03 
Re: page macros cleanup
heikki@[EMAIL PROTECTED]   2008-07-04 13:55:44 
Re: page macros cleanup
Zdenek.Kotala@[EMAIL PROT  2008-07-04 12:50:55 
Re: page macros cleanup
heikki@[EMAIL PROTECTED]   2008-07-04 14:18:37 
Re: page macros cleanup
pavan.deolasee@[EMAIL PRO  2008-07-04 16:34:15 
Re: page macros cleanup
pavan.deolasee@[EMAIL PRO  2008-07-04 16:35:36 
Re: page macros cleanup
Zdenek.Kotala@[EMAIL PROT  2008-07-04 13:04:15 
Re: page macros cleanup
Zdenek.Kotala@[EMAIL PROT  2008-07-04 13:13:03 
Re: page macros cleanup
Zdenek.Kotala@[EMAIL PROT  2008-07-04 13:47:00 
Re: page macros cleanup (ver 04)
Zdenek.Kotala@[EMAIL PROT  2008-07-04 14:11:59 
Re: page macros cleanup (ver 04)
heikki@[EMAIL PROTECTED]   2008-07-09 14:54:08 
Re: page macros cleanup (ver 04)
tgl@[EMAIL PROTECTED] (T  2008-07-13 15:02:19 
Re: page macros cleanup (ver 04)
Zdenek.Kotala@[EMAIL PROT  2008-07-08 21:28:27 
Re: page macros cleanup (ver 04)
Zdenek.Kotala@[EMAIL PROT  2008-07-09 15:43:59 
Re: page macros cleanup (ver 04)
tgl@[EMAIL PROTECTED] (T  2008-07-13 14:05:44 
Re: page macros cleanup (ver 04)
Zdenek.Kotala@[EMAIL PROT  2008-07-21 21:19:25 
Re: page macros cleanup (ver 04)
tgl@[EMAIL PROTECTED] (T  2008-07-21 16:16:13 

Post A Reply:
  Go here to Signup

AddThis Feed Button


About - Advertising - Contact - Frequently Asked Questions - Privacy Policy - Terms of Use - Signup

Contact
tan12V112 Sat Oct 11 20:25:14 CDT 2008.