Thanks for review, I've applied the patchset after some editorializing.
While further testing this feature, I realized that ProcessSingleRelationFork()
unconditionally called log_newpage_buffer() for every page of every relation
during pg_enable_data_checksums(). This included unlogged relations,
which by definition never generate WAL for data changes and are reset to their
init fork on any recovery.
Guard the log_newpage_buffer() call with RelationNeedsWAL() so that unlogged relations still get their pages dirtied (ensuring the checksum is flushed to disk at the next checkpoint) but do not emit WAL.
Attached a patch to address this and added a test for the same. My current
test checks if standby has main fork, I could just checked WAL to verify this
using pg_waldump. Any other test ideas are welcome.