Re: IO in wrong state on riscv64
| От | Thomas Munro | 
|---|---|
| Тема | Re: IO in wrong state on riscv64 | 
| Дата | |
| Msg-id | CA+hUKGKcdkNTkn9C2MT3zM3ZTVLZTZTiLKXkWVDYWh4w7MNACA@mail.gmail.com обсуждение исходный текст  | 
		
| Ответ на | Re: IO in wrong state on riscv64 (Alexander Lakhin <exclusion@gmail.com>) | 
| Ответы | 
                	
            		Re: IO in wrong state on riscv64
            		
            		 | 
		
| Список | pgsql-hackers | 
On Tue, Oct 14, 2025 at 5:00 PM Alexander Lakhin <exclusion@gmail.com> wrote:
> The replacements doesn't work for me, unfortunately: I have 3 out of 30
> 027_stream_regress test runs failed:
> 2025-10-13 21:27:26.161 UTC [4181290:5] pg_regress/brin ERROR:  IO in wrong state: 0
> 2025-10-13 21:27:26.161 UTC [4181290:6] pg_regress/brin STATEMENT: CREATE TABLE brintest (byteacol bytea,
I wonder if the problem could be with buf->io_wref.  In WaitIO() we do:
        iow = buf->io_wref;
        UnlockBufHdr(buf, buf_state);
        ...
            pgaio_wref_wait(&iow);
... but UnlockBufHdr() is only concerned with write ordering:
static inline void
UnlockBufHdr(BufferDesc *desc, uint32 buf_state)
{
    pg_write_barrier();
    pg_atomic_write_u32(&desc->state, buf_state & (~BM_LOCKED));
}
What happens if you insert pg_memory_barrier() after the line that
reads buf->io_wref?
Does this reproduce on REL_18_STABLE?
		
	В списке pgsql-hackers по дате отправления: