But every time a client reads a file that can be written by another
client, the client that reads it has to go back to the server to check
whether or not the cache is dirty, right?
No. The expected case is that the cache is not dirty.
Therefore, clients are given expiring rights to cache a file locally,
but servers can issue callbacks that cancel those.
More recently, people have been working on features to handle
conflicting rights, as after detached clients with accumulated writes
rejoin.
-t