summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sys/nfs4client/nfs4_vfsops.c10
-rw-r--r--sys/nfsclient/nfs.h3
-rw-r--r--sys/nfsclient/nfs_vfsops.c9
3 files changed, 17 insertions, 5 deletions
diff --git a/sys/nfs4client/nfs4_vfsops.c b/sys/nfs4client/nfs4_vfsops.c
index d4fc2d6..0eb113b 100644
--- a/sys/nfs4client/nfs4_vfsops.c
+++ b/sys/nfs4client/nfs4_vfsops.c
@@ -245,12 +245,18 @@ nfs_decode_args(struct nfsmount *nmp, struct nfs_args *argp)
int maxio;
s = splnet();
+
/*
* Silently clear NFSMNT_NOCONN if it's a TCP mount, it makes
- * no sense in that context.
+ * no sense in that context. Also, set appropriate retransmit
+ * and soft timeout behavior.
*/
- if (argp->sotype == SOCK_STREAM)
+ if (argp->sotype == SOCK_STREAM) {
nmp->nm_flag &= ~NFSMNT_NOCONN;
+ nmp->nm_flag |= NFSMNT_DUMBTIMR;
+ nmp->nm_timeo = NFS_MAXTIMEO;
+ nmp->nm_retry = NFS_RETRANS_TCP;
+ }
nmp->nm_flag &= ~NFSMNT_RDIRPLUS;
diff --git a/sys/nfsclient/nfs.h b/sys/nfsclient/nfs.h
index 9dc34a7..a87966d 100644
--- a/sys/nfsclient/nfs.h
+++ b/sys/nfsclient/nfs.h
@@ -53,7 +53,8 @@
#define NFS_MAXTIMEO (60 * NFS_HZ) /* Max timeout to backoff to */
#define NFS_MINIDEMTIMEO (5 * NFS_HZ) /* Min timeout for non-idempotent ops*/
#define NFS_MAXREXMIT 100 /* Stop counting after this many */
-#define NFS_RETRANS 10 /* Num of retrans for soft mounts */
+#define NFS_RETRANS 10 /* Num of retrans for UDP soft mounts */
+#define NFS_RETRANS_TCP 2 /* Num of retrans for TCP soft mounts */
#define NFS_MAXGRPS 16 /* Max. size of groups list */
#ifndef NFS_MINATTRTIMO
#define NFS_MINATTRTIMO 3 /* VREG attrib cache timeout in sec */
diff --git a/sys/nfsclient/nfs_vfsops.c b/sys/nfsclient/nfs_vfsops.c
index 17a009c..858f405 100644
--- a/sys/nfsclient/nfs_vfsops.c
+++ b/sys/nfsclient/nfs_vfsops.c
@@ -545,10 +545,15 @@ nfs_decode_args(struct mount *mp, struct nfsmount *nmp, struct nfs_args *argp)
/*
* Silently clear NFSMNT_NOCONN if it's a TCP mount, it makes
- * no sense in that context.
+ * no sense in that context. Also, set up appropriate retransmit
+ * and soft timeout behavior.
*/
- if (argp->sotype == SOCK_STREAM)
+ if (argp->sotype == SOCK_STREAM) {
nmp->nm_flag &= ~NFSMNT_NOCONN;
+ nmp->nm_flag |= NFSMNT_DUMBTIMR;
+ nmp->nm_timeo = NFS_MAXTIMEO;
+ nmp->nm_retry = NFS_RETRANS_TCP;
+ }
/* Also clear RDIRPLUS if not NFSv3, it crashes some servers */
if ((argp->flags & NFSMNT_NFSV3) == 0)
OpenPOWER on IntegriCloud