Richard Hipp wrote: > On 1/25/16, Howard Chu <hyc at symas.com> wrote: >> >> This is actually quite an unusual requirement; on older Unix systems you >> couldn't even *open* a directory, let alone obtain write access to it or >> fsync it. > > Yeah. When the SQLITE_DISABLE_DIRSYNC compile-time option is present, > we disable the directory sync logic for this reason. Some unixes > (HP/UX) require -DSQLITE_DISABLE_DIRSYNC in order to work. But Linux, > MacOS, and *BSD all work without it, so I thought I'd just not bring > that up...
I would have to say this is a BSD OS bug as it breaks the guarantees stated in the manpages. I.e., rename() and unlink() syscalls are documented to be atomic, and fsync() doesn't say anything about being needed to sync a directory. http://www.unix.com/man-page/FreeBSD/2/fsync http://www.unix.com/man-page/FreeBSD/2/unlink http://www.unix.com/man-page/FreeBSD/2/rename/ I no longer have BSD source code on hand but I'd bet that when those manpages were written, all directory modifications in the BSD ffs were always synchronous. Linux obviously changed this but at least their fsync() manpage documents the behavior. -- -- Howard Chu CTO, Symas Corp. http://www.symas.com Director, Highland Sun http://highlandsun.com/hyc/ Chief Architect, OpenLDAP http://www.openldap.org/project/