3 ms·
It doesn't require severe FS corruption. In reality "write 'foo~'" just starts an asynchronous write; it's possible for rename to happen before that async write
by ynik 6y ago
It doesn't require severe FS corruption.
In reality "write 'foo~'" just starts an asynchronous write; it's possible for rename to happen before that async write is complete.
So in case of a system crash you might end up seeing partial data in 'foo'.
fsync() may or may not protect against that depending on what system we're talking about.
- tomtomtom777 6y agoSure, you are still dependent on constraints to durability and atomicity of the filesystem write of the new data. But this is handled properly in most modern filesystems (ext3,ext4,zfs) by default (as data=ordered ensures data writes precede metadata writes). The point of rename() is to prevent a version to ever exist that mixes the old and the new version, which it always does, regardless of the filesystem.