diff --git a/src/backend/storage/buffer/bufmgr.c b/src/backend/storage/buffer/bufmgr.c new file mode 100644 index 2ca2ab9..2109cbf *** a/src/backend/storage/buffer/bufmgr.c --- b/src/backend/storage/buffer/bufmgr.c *************** PinBuffer(BufferDesc *buf, BufferAccessS *** 1595,1603 **** /* increase refcount */ buf_state += BUF_REFCOUNT_ONE; ! /* increase usagecount unless already max */ ! if (BUF_STATE_GET_USAGECOUNT(buf_state) != BM_MAX_USAGE_COUNT) ! buf_state += BUF_USAGECOUNT_ONE; if (pg_atomic_compare_exchange_u32(&buf->state, &old_buf_state, buf_state)) --- 1595,1615 ---- /* increase refcount */ buf_state += BUF_REFCOUNT_ONE; ! if (strategy == NULL) ! { ! /* 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, buf_state))