On Sun, 24 Nov 2024 at 13:50, Al Viro <viro@xxxxxxxxxxxxxxxxxx> wrote: > > Linus, do you see any good reasons to bother with that kind of stuff? > It's not the first time such metadata update vs. read atomicity comes > up, maybe we ought to settle that for good and document the decision > and reasons for it. > > This time it's about timestamp (seconds vs. nanoseconds), but there'd > been mode vs. uid vs. gid mentioned in earlier threads. I think the only one we ended up really caring about was i_size, which had the 32-bit tearing problem and we do i_size_read() as a result. I *do* think that we could perhaps extend (and rename) the inode->i_size_seqcount to just cover all of the core inode metadata stuff. And then - exactly like we already do in practice with inode->i_size_seqcount - some places might just choose to ignore it anyway. But at least using a sequence count shouldn't make things like stat() any worse in practice. That said, I don't think this is a real problem in practice. The race window is too small, and the race effects are too insignificant. Yes, getting the nanoseconds out of sync with the seconds is a bug, but when it effectively never happens, and when it *does* happen it likely has no real downsides, I suspect it's also not something we should worry over-much about. So I mention the "rename and extend i_size_seqcount" as a solution that I suspect might be acceptable if somebody has the motivation and energy, but honestly I also think "nobody can be bothered" is acceptable in practice. Linus