This comment in UpdateFullPageWrites() seems to be inaccurate:
* It's safe to check the shared full_page_writes without the lock,
* because we assume that there is no concurrently running process which
* can update it.
That assumption does not hold on any sane SMP system.
I think the real reason is that we assume that read/write to an integer is
atomic, like we do for TransactionId variables:
heapam.c: "TransactionId read/write is assumed atomic anyway."
Best regards,
PS: As usual, I hope I am not missing something very obvious.
--
Gurjeet Singh
http://gurjeet.singh.im/