On Mon, Jun 17, 2019 at 3:48 PM Dave Chinner <david@xxxxxxxxxxxxx> wrote: > > The wording of posix changes every time they release a new version > of the standard, and it's _never_ obvious what behaviour the > standard is actually meant to define. They are always written with > sufficient ambiguity and wiggle room that they could mean > _anything_. The POSIX 2017.1 standard you quoted is quite different > to older versions, but it's no less ambiguous... POSIX has always been pretty lax, partly because all the Unixes did things differently, but partly because it then also ended up about trying to work for the VMS and Windows posix subsystems.. So yes, the language tends to be intentionally not all that strict. > > The pthreads atomicity thing seems to be about not splitting up IO and > > doing it in chunks when you have m:n threading models, but can be > > (mis-)construed to have threads given higher atomicity guarantees than > > processes. > > Right, but regardless of the spec we have to consider that the > behaviour of XFS comes from it's Irix heritage (actually from EFS, > the predecessor of XFS from the late 1980s) Sure. And as I mentioned, I think it's technically the nicer guarantee. That said, it's a pretty *expensive* guarantee. It's one that you yourself are not willing to give for O_DIRECT IO. And it's not a guarantee that Linux has ever had. In fact, it's not even something I've ever seen anybody ever depend on. I agree that it's possible that some app out there might depend on that kind of guarantee, but I also suspect it's much much more likely that it's the other way around: XFS is being unnecessarily strict, because everybody is testing against filesystems that don't actually give the total atomicity guarantees. Nobody develops for other unixes any more (and nobody really ever did it by reading standards papers - even if they had been very explicit). And honestly, the only people who really do threaded accesses to the same file (a) don't want that guarantee in the first place (b) are likely to use direct-io that apparently doesn't give that atomicity guarantee even on xfs so I do think it's moot. End result: if we had a really cheap range lock, I think it would be a good idea to use it (for the whole QoI implementation), but for practical reasons it's likely better to just stick to the current lack of serialization because it performs better and nobody really seems to want anything else anyway. Linus