On Tue, 2012-10-16 at 09:37 +0800, Chen Gang wrote: > 于 2012年10月15日 20:32, Myklebust, Trond 写道: > > RPC is not ordered. The fact that we get one RPC reply before another > > does not mean that the server sent them in that order. > > > > This is doubly true when you use UDP as the transport protocol. > > 1) is it means: nfs_inode_attrs_need_update need not consider async > read_done situation ? I don't understand what you mean. This is mainly about the asynchronous write situation... > 2) for correctness, I do not think "nfs_size_to_loff_t(fattr->size) > > i_size_read(inode)" in nfs_size_need_update is enough. (at least need > use "!=" instead of '>'), do you think so ? No... If I did, I would have changed this 15 years ago when I was writing that code. Nothing here is new... 2.6.27-rc9 has the exact same heuristics. It boils down to the rule that if you want to ensure that data is not _lost_, then you have to ensure that the cached file size is not less than the true file size. > 3) another reference: > > A) for an old kernel version (such as 2.6.27-rc9), no such issue > (because it did not have nfs_size_need_update). > > B) the test tools which I use is from the LTP (Linux Test Project), > they use both udp and tcp to test both the nfsv2 and nfsv3. So what combinations are failing? > C) truly LTP has its limitations: "for stress test, LTP let nfs client > and server under the same machine, which will cause kernel stable > issue", but for net test, LTP use different machine (I got our issue > from LTP net test). Running the client and server on the same machine is likely to deadlock due to memory pressure issues. The client needs to be able to _increase_ memory pressure on the server in order to reduce its own pressure. That doesn't work well when client == server. -- Trond Myklebust Linux NFS client maintainer NetApp Trond.Myklebust@xxxxxxxxxx www.netapp.com ��.n��������+%������w��{.n�����{��w���jg��������ݢj����G�������j:+v���w�m������w�������h�����٥