BM_IO_ERROR flag is lost in TerminateBufferIO due to order of operations in UnlockBufHdrExt - Mailing list pgsql-hackers

From Yura Sokolov
Subject BM_IO_ERROR flag is lost in TerminateBufferIO due to order of operations in UnlockBufHdrExt
Date
Msg-id ab0dcc9e-aba0-44e3-ac23-8d74c48888e6@postgrespro.ru
Whole thread Raw
Responses Re: BM_IO_ERROR flag is lost in TerminateBufferIO due to order of operations in UnlockBufHdrExt
List pgsql-hackers
Good day, Andres and hackers.

UnlockBufHdrExt does:

   buf_state |= set_bits;
   buf_state &= ~unset_bits;
   buf_state &= ~BM_LOCKED;

TerminateBufferIO unconditionally does:

   unset_flag_bits |= BM_IO_ERROR;

Due to this, AbortBufferIO and buffer_readv_complete_one are failed
to set BM_IO_ERROR with call to TerminateBufferIO.

It was found with proprietary code that was triggered on
PGAIO_RS_ERROR and made assertion on BM_IO_ERROR presence.

-- 
regards
Yura Sokolov aka funny-falcon




pgsql-hackers by date:

Previous
From: Alexandre Felipe
Date:
Subject: Re: SLOPE - Planner optimizations on monotonic expressions.
Next
From: Andres Freund
Date:
Subject: Re: Don't synchronously wait for already-in-progress IO in read stream