Hi, I reviewed v2. It fixes both regressions I raised on v1. With one block, mdzeroextend() takes the same FileZero() path as the old mdextend() call, so nothing changes at runtime there.
One request. smgrzeroextend(..., nblocks - 1, 1, ...) looks like a bug unless you know why, and changing it to (0, nblocks) brings the 2x regression back. Please add a one line comment in bufmgr.c and md.c saying only the last block is written on purpose. Nit, the "don't set checksum" comment in bulk_write.c no longer applies, since no page is passed. Note that v2 does not move toward the zero page detection idea. The blocks before the last one are still holes, which read as zeros and never pass through smgrzeroextend(). Making them non-zero means writing them, which is the 2x cost Bharath measured. Thanks, Shihao
