8
8
*
9
9
*
10
10
* IDENTIFICATION
11
- * $Header: /cvsroot/pgsql/src/backend/storage/buffer/bufmgr.c,v 1.76 2000/03/14 22:46:27 tgl Exp $
11
+ * $Header: /cvsroot/pgsql/src/backend/storage/buffer/bufmgr.c,v 1.77 2000/03/31 02:43:31 tgl Exp $
12
12
*
13
13
*-------------------------------------------------------------------------
14
14
*/
15
15
/*
16
16
*
17
17
* BufferAlloc() -- lookup a buffer in the buffer table. If
18
- * it isn't there add it, but do not read it into memory.
18
+ * it isn't there add it, but do not read data into memory.
19
19
* This is used when we are about to reinitialize the
20
20
* buffer so don't care what the current disk contents are.
21
- * BufferAlloc() pins the new buffer in memory.
21
+ * BufferAlloc() also pins the new buffer in memory.
22
22
*
23
- * ReadBuffer() -- same as BufferAlloc() but reads the data
23
+ * ReadBuffer() -- like BufferAlloc() but reads the data
24
24
* on a buffer cache miss.
25
25
*
26
26
* ReleaseBuffer() -- unpin the buffer
27
27
*
28
28
* WriteNoReleaseBuffer() -- mark the buffer contents as "dirty"
29
29
* but don't unpin. The disk IO is delayed until buffer
30
- * replacement if WriteMode is BUFFER_LATE_WRITE .
30
+ * replacement.
31
31
*
32
32
* WriteBuffer() -- WriteNoReleaseBuffer() + ReleaseBuffer()
33
33
*
34
- * FlushBuffer() -- as above but never delayed write.
34
+ * FlushBuffer() -- Write buffer immediately. Can unpin, or not,
35
+ * depending on parameter.
35
36
*
36
37
* BufferSync() -- flush all dirty buffers in the buffer pool.
37
38
*
@@ -70,11 +71,7 @@ extern long int LocalBufferFlushCount;
70
71
*/
71
72
bool SharedBufferChanged = false;
72
73
73
- static int WriteMode = BUFFER_LATE_WRITE ; /* Delayed write is
74
- * default */
75
-
76
74
static void WaitIO (BufferDesc * buf , SPINLOCK spinlock );
77
-
78
75
static void StartBufferIO (BufferDesc * buf , bool forInput );
79
76
static void TerminateBufferIO (BufferDesc * buf );
80
77
static void ContinueBufferIO (BufferDesc * buf , bool forInput );
@@ -97,7 +94,6 @@ static Buffer ReadBufferWithBufferLock(Relation relation, BlockNumber blockNum,
97
94
bool bufferLockHeld );
98
95
static BufferDesc * BufferAlloc (Relation reln , BlockNumber blockNum ,
99
96
bool * foundPtr , bool bufferLockHeld );
100
- static int FlushBuffer (Buffer buffer , bool release );
101
97
static void BufferSync (void );
102
98
static int BufferReplace (BufferDesc * bufHdr , bool bufferLockHeld );
103
99
void PrintBufferDescs (void );
@@ -658,8 +654,7 @@ BufferAlloc(Relation reln,
658
654
/*
659
655
* WriteBuffer
660
656
*
661
- * Pushes buffer contents to disk if WriteMode is BUFFER_FLUSH_WRITE.
662
- * Otherwise, marks contents as dirty.
657
+ * Marks buffer contents as dirty (actual write happens later).
663
658
*
664
659
* Assume that buffer is pinned. Assume that reln is
665
660
* valid.
@@ -675,28 +670,23 @@ WriteBuffer(Buffer buffer)
675
670
{
676
671
BufferDesc * bufHdr ;
677
672
678
- if (WriteMode == BUFFER_FLUSH_WRITE )
679
- return FlushBuffer (buffer , TRUE);
680
- else
681
- {
673
+ if (BufferIsLocal (buffer ))
674
+ return WriteLocalBuffer (buffer , TRUE);
682
675
683
- if (BufferIsLocal (buffer ))
684
- return WriteLocalBuffer ( buffer , TRUE) ;
676
+ if (BAD_BUFFER_ID (buffer ))
677
+ return FALSE ;
685
678
686
- if (BAD_BUFFER_ID (buffer ))
687
- return FALSE;
679
+ bufHdr = & BufferDescriptors [buffer - 1 ];
688
680
689
- bufHdr = & BufferDescriptors [ buffer - 1 ] ;
681
+ SharedBufferChanged = true ;
690
682
691
- SharedBufferChanged = true;
683
+ SpinAcquire (BufMgrLock );
684
+ Assert (bufHdr -> refcount > 0 );
685
+ bufHdr -> flags |= (BM_DIRTY | BM_JUST_DIRTIED );
686
+ UnpinBuffer (bufHdr );
687
+ SpinRelease (BufMgrLock );
688
+ CommitInfoNeedsSave [buffer - 1 ] = 0 ;
692
689
693
- SpinAcquire (BufMgrLock );
694
- Assert (bufHdr -> refcount > 0 );
695
- bufHdr -> flags |= (BM_DIRTY | BM_JUST_DIRTIED );
696
- UnpinBuffer (bufHdr );
697
- SpinRelease (BufMgrLock );
698
- CommitInfoNeedsSave [buffer - 1 ] = 0 ;
699
- }
700
690
return TRUE;
701
691
}
702
692
@@ -778,9 +768,9 @@ DirtyBufferCopy(Oid dbid, Oid relid, BlockNumber blkno, char *dest)
778
768
* 'buffer' is known to be dirty/pinned, so there should not be a
779
769
* problem reading the BufferDesc members without the BufMgrLock
780
770
* (nobody should be able to change tags, flags, etc. out from under
781
- * us).
771
+ * us). Unpin if 'release' is TRUE.
782
772
*/
783
- static int
773
+ int
784
774
FlushBuffer (Buffer buffer , bool release )
785
775
{
786
776
BufferDesc * bufHdr ;
@@ -850,36 +840,27 @@ FlushBuffer(Buffer buffer, bool release)
850
840
/*
851
841
* WriteNoReleaseBuffer -- like WriteBuffer, but do not unpin the buffer
852
842
* when the operation is complete.
853
- *
854
- * We know that the buffer is for a relation in our private cache,
855
- * because this routine is called only to write out buffers that
856
- * were changed by the executing backend.
857
843
*/
858
844
int
859
845
WriteNoReleaseBuffer (Buffer buffer )
860
846
{
861
847
BufferDesc * bufHdr ;
862
848
863
- if (WriteMode == BUFFER_FLUSH_WRITE )
864
- return FlushBuffer (buffer , FALSE);
865
- else
866
- {
849
+ if (BufferIsLocal (buffer ))
850
+ return WriteLocalBuffer (buffer , FALSE);
867
851
868
- if (BufferIsLocal (buffer ))
869
- return WriteLocalBuffer ( buffer , FALSE) ;
852
+ if (BAD_BUFFER_ID (buffer ))
853
+ return STATUS_ERROR ;
870
854
871
- if (BAD_BUFFER_ID (buffer ))
872
- return STATUS_ERROR ;
855
+ bufHdr = & BufferDescriptors [buffer - 1 ];
873
856
874
- bufHdr = & BufferDescriptors [ buffer - 1 ] ;
857
+ SharedBufferChanged = true ;
875
858
876
- SharedBufferChanged = true;
859
+ SpinAcquire (BufMgrLock );
860
+ bufHdr -> flags |= (BM_DIRTY | BM_JUST_DIRTIED );
861
+ SpinRelease (BufMgrLock );
862
+ CommitInfoNeedsSave [buffer - 1 ] = 0 ;
877
863
878
- SpinAcquire (BufMgrLock );
879
- bufHdr -> flags |= (BM_DIRTY | BM_JUST_DIRTIED );
880
- SpinRelease (BufMgrLock );
881
- CommitInfoNeedsSave [buffer - 1 ] = 0 ;
882
- }
883
864
return STATUS_OK ;
884
865
}
885
866
@@ -2002,16 +1983,6 @@ _bm_die(Oid dbId, Oid relId, int blkNo, int bufNo,
2002
1983
2003
1984
#endif /* BMTRACE */
2004
1985
2005
- int
2006
- SetBufferWriteMode (int mode )
2007
- {
2008
- int old ;
2009
-
2010
- old = WriteMode ;
2011
- WriteMode = mode ;
2012
- return old ;
2013
- }
2014
-
2015
1986
void
2016
1987
SetBufferCommitInfoNeedsSave (Buffer buffer )
2017
1988
{
0 commit comments