summaryrefslogtreecommitdiffstats
path: root/sys/nfsclient/nfs_socket.c
diff options
context:
space:
mode:
authormohans <mohans@FreeBSD.org>2007-03-09 04:02:38 +0000
committermohans <mohans@FreeBSD.org>2007-03-09 04:02:38 +0000
commita332cb00d57e6d307a6d08a69b4d5430b20c7850 (patch)
tree24b2e714c624eb1b06a4af38fe8eb04bc9f63660 /sys/nfsclient/nfs_socket.c
parent088212ae5d87f38b2e7890e8e1a608a268db0add (diff)
downloadFreeBSD-src-a332cb00d57e6d307a6d08a69b4d5430b20c7850.zip
FreeBSD-src-a332cb00d57e6d307a6d08a69b4d5430b20c7850.tar.gz
Over NFS, an open() call could result in multiple over-the-wire
GETATTRs being generated - one from lookup()/namei() and the other from nfs_open() (for cto consistency). This change eliminates the GETATTR in nfs_open() if an otw GETATTR was done from the namei() path. Instead of extending the vop interface, we timestamp each attr load, and use this to detect whether a GETATTR was done from namei() for this syscall. Introduces a thread-local variable that counts the syscalls made by the thread and uses <pid, tid, thread syscalls> as the attrload timestamp. Thanks to jhb@ and peter@ for a discussion on thread state that could be used as the timestamp with minimal overhead.
Diffstat (limited to 'sys/nfsclient/nfs_socket.c')
-rw-r--r--sys/nfsclient/nfs_socket.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/sys/nfsclient/nfs_socket.c b/sys/nfsclient/nfs_socket.c
index 6036050..a28d837 100644
--- a/sys/nfsclient/nfs_socket.c
+++ b/sys/nfsclient/nfs_socket.c
@@ -1412,7 +1412,7 @@ nfs_timer(void *arg)
}
if (rep->r_rtt >= 0) {
rep->r_rtt++;
- if (nmp->nm_flag & NFSMNT_DUMBTIMR)
+ if ((nmp->nm_flag & NFSMNT_DUMBTIMR) || (nmp->nm_sotype == SOCK_STREAM))
timeo = nmp->nm_timeo;
else
timeo = nfs_estimate_rto(nmp, rep->r_procnum);
OpenPOWER on IntegriCloud