On 03.06.24 17:28, Nathan Bossart wrote:
I agree, two states should be enough.  It could basically just be

pg_fsync(int fd)
{
#if macos
     fcntl(fd, F_FULLFSYNC);
#else
     fsync(fd);
#endif
}
IIUC with this approach, anyone who is using a file system that fails
fcntl(F_FULLSYNC) with ENOSUPP would have to turn fsync off.  That might be
the right thing to do since having a third option that sends the data to
the disk cache but doesn't provide any real guarantees if you lose power
may not be worth much.  However, if such a file system_did_  provide such
guarantees with just fsync(), then it would be unfortunate to force people
to turn fsync off.  But this could very well all be hypothetical, for all I
know...  In any case, I agree that we should probably use F_FULLFSYNC by
default on macOS.

Yeah, my example code above says "#if macos", not "#ifdef F_FULLSYNC". The latter might be a problem along the lines you describe if other systems use that symbol in a slightly different manner.



Reply via email to