713f46ac47
get a reply of EEXIST from an NFS server when a Mkdir RPC was retried, for an NFS over UDP mount. Upon investigation, it was found that the client was retransmitting the Mkdir RPC request over UDP, but with a different xid. As such, the retransmitted message would miss the Duplicate Request Cache in the server, causing it to reply EEXIST. The kernel client side UDP rpc code has two timers. The first one causes a retransmit using the same xid and socket and was set to a fixed value of 3seconds. (The default can be overridden via CLSET_RETRY_TIMEOUT.) The second one creates a new socket and xid and should be larger than the first. However, both NFS clients were setting the second timer to nm_timeo ("timeout=<value>" mount argument), which defaulted to 1second, so the first timer would never time out. This patch fixes both NFS clients so that they set the first timer using nm_timeo and makes the second timer larger than the first one. Reported by: jwd Tested by: jwd Reviewed by: jhb MFC after: 2 weeks |
||
---|---|---|
.. | ||
nfs_commonacl.c | ||
nfs_commonkrpc.c | ||
nfs_commonport.c | ||
nfs_commonsubs.c | ||
nfs_var.h | ||
nfs.h | ||
nfscl.h | ||
nfsclstate.h | ||
nfsdport.h | ||
nfskpiport.h | ||
nfsm_subs.h | ||
nfsport.h | ||
nfsproto.h | ||
nfsrvcache.h | ||
nfsrvstate.h | ||
nfsv4_errstr.h | ||
rpcv2.h | ||
xdr_subs.h |