pgsql: bufmgr: Fix order of operations in UnlockBufHdrExt - Mailing list pgsql-committers

From Andres Freund
Subject pgsql: bufmgr: Fix order of operations in UnlockBufHdrExt
Date
Msg-id E1wiF0H-000TfF-0A@gemulon.postgresql.org
Whole thread
List pgsql-committers
bufmgr: Fix order of operations in UnlockBufHdrExt

In c75ebc657ffc I (Andres) introduced UnlockBufHdrExt() which can set and
clear bits in the buffer state using CAS. Unfortunately I added bits before
subtracting them, which means that a bit that was both removed and set would
remain unset.  Fix the order of operations.

The only known case where that is a problem is that BM_IO_ERROR would not
actually remain set.

It's unfortunately not trivial to add a decent, race-free, test to verify that
BM_IO_ERROR remains set. That's therefore left for the 20 cycle.

Reported-by: Yura Sokolov <y.sokolov@postgrespro.ru>
Discussion: https://postgr.es/m/ab0dcc9e-aba0-44e3-ac23-8d74c48888e6@postgrespro.ru
Backpatch-through: 19, where c75ebc657ffc went in

Branch
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/c787c952bc882626c66ec64b1d35a664902bfa8b

Modified Files
--------------
src/include/storage/buf_internals.h | 17 +++++++++++------
1 file changed, 11 insertions(+), 6 deletions(-)


pgsql-committers by date:

Previous
From: Thom Brown
Date:
Subject: Re: pgsql: SQL Property Graph Queries (SQL/PGQ)
Next
From: Melanie Plageman
Date:
Subject: pgsql: Update FSM after updating VM on-access