Re: Linux 2.6.29

Matthew Garrett
2009-03-27T14:52:21Z

On Fri, Mar 27, 2009 at 07:24:38AM -0400, Theodore Tso wrote:
> On Fri, Mar 27, 2009 at 06:21:14AM +0000, Matthew Garrett wrote:
> > And, hey, fsync didn't make POSIX proper until 1996. It's not like
> > authors were able to depend on it for a significant period of time
> > before ext3 hit the scene.
>
> Fsync() was in BSD 4.3 and it was in much earlier Unix specifications,
> such as SVID, well before it appeared in POSIX. If an interface was
> in both BSD and AT&T System V Unix, it was around everywhere.

And if a behaviour is in ext3, then for the vast majority of practical
purposes it exists everywere. Users of non-Linux POSIX operating systems
are niche. Users of non-ext3 filesystems on Linux are niche.

> > (It could be argued that most relevant Unices implemented fsync() even
> > before then, so its status in POSIX was broadly irrelevant. The obvious
> > counterargument is that most relevant Unix filesystems ensure that data
> > is written before a clobbering rename() is carried out, so POSIX is
> > again not especially releant)
>
> Nope, not true. Most relevant Unix file systems sync'ed data blocks
> on a 30 timer, and metadata on 5 second timers. They did *not* force
> data to be written before a clobbering rename() was carried you;
> you're rewriting history when you say that; it's simply not true.
> Rename was atomic *only* where metadata was concerned, and all the
> talk about rename being atomic was because back then we didn't have
> flock() and you built locking primitives open(O_CREAT) and rename();
> but that was only metadata, and that was only if the system didn't
> crash.

No, you're missing my point. The other Unix file systems are irrelevant.
The number of people running them and having any real risk of system
crash is small, and they're the ones with full system backups anyway.

> When I was growing up we were trained to *always* check error returns
> from *all* system calls, and to *always* fsync() if it was critical
> that the data survive a crash. That was what competent Unix
> programmers did. And if you are always checking error returns, the
> difference in the Lines of Code between doing it right and doing
> really wasn't that big --- and again, back then fsync() wan't
> expensive. Making fsync expensive was ext3's data=ordered mode's
> fault.

When my grandmother was growing up she had to use an outside toilet.
Sometimes the past sucked and we're glad of progress being made.

> Then again, most users or system administrators of Unix systems didn't
> tolerate device drivers that would crash your system when you exited a
> game, either.... and I've said that I recognize the world has changed
> and that crappy application programmers outnumber kernel programers,
> which is why I coded the workaround for ext4. That still doesn't make
> what they are doing correct.

No, look, you're blaming userspace again. Stop it.
--
Matthew Garrett | mjg59@srcf.ucam.org