Revert unintentional change in increasing usage count during pin of buffers,
this makes buffer access strategy have no effect.
Change was a part of commit 48354581a4
during 9.6
release cycle, so backpath to 9.6
Reported-by: Jim Nasby
Author: Alexander Korotkov
Reviewed-by: Jim Nasby, Andres Freund
https://commitfest.postgresql.org/13/1029/
This commit is contained in:
parent
de34123834
commit
9cf6033281
|
@ -1595,9 +1595,21 @@ PinBuffer(BufferDesc *buf, BufferAccessStrategy strategy)
|
||||||
/* increase refcount */
|
/* increase refcount */
|
||||||
buf_state += BUF_REFCOUNT_ONE;
|
buf_state += BUF_REFCOUNT_ONE;
|
||||||
|
|
||||||
/* increase usagecount unless already max */
|
if (strategy == NULL)
|
||||||
if (BUF_STATE_GET_USAGECOUNT(buf_state) != BM_MAX_USAGE_COUNT)
|
{
|
||||||
buf_state += BUF_USAGECOUNT_ONE;
|
/* Default case: increase usagecount unless already max. */
|
||||||
|
if (BUF_STATE_GET_USAGECOUNT(buf_state) < BM_MAX_USAGE_COUNT)
|
||||||
|
buf_state += BUF_USAGECOUNT_ONE;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* Ring buffers shouldn't evict others from pool. Thus we
|
||||||
|
* don't make usagecount more than 1.
|
||||||
|
*/
|
||||||
|
if (BUF_STATE_GET_USAGECOUNT(buf_state) == 0)
|
||||||
|
buf_state += BUF_USAGECOUNT_ONE;
|
||||||
|
}
|
||||||
|
|
||||||
if (pg_atomic_compare_exchange_u32(&buf->state, &old_buf_state,
|
if (pg_atomic_compare_exchange_u32(&buf->state, &old_buf_state,
|
||||||
buf_state))
|
buf_state))
|
||||||
|
|
Loading…
Reference in New Issue