Ah, you're assuming an editor that saves the state of the program on
almost every keystroke plus a filesystem that preserves *some* consistent
state, but not necessarily the most recent one.
In that case, I agree: editors should not fsync() their autosave state if
they're preserving it every keystroke or so (and the filesystem should not
destroy the contents of the autosave file: thankfully neither ext3 nor
ext4 do so, now that they recognize rename() as implying a
block-allocation ordering barrier). But I certainly don't agree that
editors shouldn't fsync() files *when you explicitly asked it to save
them*! No, I don't think it's acceptable to lose work, even a few seconds'
work, after I tell an editor 'save now dammit'. That's what 'save'
*means*.
And that's why Ted's gone to some lengths to make fsync() fast in ext4:
because he wants people to actually *use* it.
Posted Nov 2, 2009 21:09 UTC (Mon) by anton (guest, #25547)
[Link]
Using fsync() does not prevent losing a bit of work when you press
save, because the system can crash between the time when you hit save
and when the application actually calls and completes fsync(). The only thing that
fsync() buys is that the save takes longer, and once it's finished and
the application lets you work again, you won't lose the few seconds.
That may be worth the cost for you, but I wonder why?
As for Ted T'so, I would have preferred it if he went to some
lengths to make ext4 a good file system; then fsync() would not be
needed as much. Hmm, makes me wonder if he made fsync() fast because
ext4 is bad, or if he made ext4 bad in order to encourage use of
fsync().