Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 30 Apr 2015 12:44:21 +0000 (UTC)
From:      Rick Macklem <rmacklem@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-10@freebsd.org
Subject:   svn commit: r282271 - in stable/10/sys/fs: nfs nfsserver
Message-ID:  <201504301244.t3UCiLXo003101@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: rmacklem
Date: Thu Apr 30 12:44:20 2015
New Revision: 282271
URL: https://svnweb.freebsd.org/changeset/base/282271

Log:
  MFC: r281628
  mav@ has found that NFS servers exporting ZFS file systems
  can perform better when using a 128K read/write data size.
  This patch changes NFS_MAXDATA from 64K to 128K so that
  clients can use 128K for NFS mounts to allow this.
  The patch also renames NFS_MAXDATA to NFS_SRVMAXIO so
  that it is clear that it applies to the NFS server side
  only. It also avoids a name conflict with the NFS_MAXDATA
  defined in rpcsvc/nfs_prot.h, that is used for userland RPC.

Modified:
  stable/10/sys/fs/nfs/nfs.h
  stable/10/sys/fs/nfs/nfs_commonport.c
  stable/10/sys/fs/nfs/nfsproto.h
  stable/10/sys/fs/nfsserver/nfs_nfsdserv.c
Directory Properties:
  stable/10/   (props changed)

Modified: stable/10/sys/fs/nfs/nfs.h
==============================================================================
--- stable/10/sys/fs/nfs/nfs.h	Thu Apr 30 12:39:24 2015	(r282270)
+++ stable/10/sys/fs/nfs/nfs.h	Thu Apr 30 12:44:20 2015	(r282271)
@@ -159,7 +159,7 @@
 	(t).tv_sec = time.tv_sec; (t).tv_nsec = 1000 * time.tv_usec; } while (0)
 #define	NFS_SRVMAXDATA(n) 						\
 		(((n)->nd_flag & (ND_NFSV3 | ND_NFSV4)) ? 		\
-		 NFS_MAXDATA : NFS_V2MAXDATA)
+		 NFS_SRVMAXIO : NFS_V2MAXDATA)
 #define	NFS64BITSSET	0xffffffffffffffffull
 #define	NFS64BITSMINUS1	0xfffffffffffffffeull
 

Modified: stable/10/sys/fs/nfs/nfs_commonport.c
==============================================================================
--- stable/10/sys/fs/nfs/nfs_commonport.c	Thu Apr 30 12:39:24 2015	(r282270)
+++ stable/10/sys/fs/nfs/nfs_commonport.c	Thu Apr 30 12:44:20 2015	(r282271)
@@ -281,11 +281,11 @@ nfsvno_getfs(struct nfsfsinfo *sip, int 
 	if (isdgram)
 		pref = NFS_MAXDGRAMDATA;
 	else
-		pref = NFS_MAXDATA;
-	sip->fs_rtmax = NFS_MAXDATA;
+		pref = NFS_SRVMAXIO;
+	sip->fs_rtmax = NFS_SRVMAXIO;
 	sip->fs_rtpref = pref;
 	sip->fs_rtmult = NFS_FABLKSIZE;
-	sip->fs_wtmax = NFS_MAXDATA;
+	sip->fs_wtmax = NFS_SRVMAXIO;
 	sip->fs_wtpref = pref;
 	sip->fs_wtmult = NFS_FABLKSIZE;
 	sip->fs_dtpref = pref;

Modified: stable/10/sys/fs/nfs/nfsproto.h
==============================================================================
--- stable/10/sys/fs/nfs/nfsproto.h	Thu Apr 30 12:39:24 2015	(r282270)
+++ stable/10/sys/fs/nfs/nfsproto.h	Thu Apr 30 12:44:20 2015	(r282271)
@@ -54,11 +54,10 @@
 #define	NFS_VER4	4
 #define	NFS_V2MAXDATA	8192
 #define	NFS_MAXDGRAMDATA 16384
-#define	NFS_MAXDATA	NFS_MAXBSIZE
 #define	NFS_MAXPATHLEN	1024
 #define	NFS_MAXNAMLEN	255
 #define	NFS_MAXPKTHDR	404
-#define	NFS_MAXPACKET	(NFS_MAXDATA + 2048)
+#define	NFS_MAXPACKET	(NFS_SRVMAXIO + 2048)
 #define	NFS_MINPACKET	20
 #define	NFS_FABLKSIZE	512	/* Size in bytes of a block wrt fa_blocks */
 #define	NFSV4_MINORVERSION	0	/* V4 Minor version */
@@ -67,6 +66,18 @@
 #define	NFSV41_CBVERS		4	/* V4.1 CB Version */
 #define	NFSV4_SMALLSTR	50		/* Strings small enough for stack */
 
+/*
+ * This value isn't a fixed value in the RFCs.
+ * It is the maximum data size supported by NFSv3 or NFSv4 over TCP for
+ * the server.  It should be set to the I/O size preferred by ZFS or
+ * MAXBSIZE, whichever is greater.
+ * ZFS currently prefers 128K.
+ * It used to be called NFS_MAXDATA, but has been renamed to clarify that
+ * it refers to server side only and doesn't conflict with the NFS_MAXDATA
+ * defined in rpcsvc/nfs_prot.h for userland.
+ */
+#define	NFS_SRVMAXIO	(128 * 1024)
+
 /* Stat numbers for rpc returns (version 2, 3 and 4) */
 /*
  * These numbers are hard-wired in the RFCs, so they can't be changed.

Modified: stable/10/sys/fs/nfsserver/nfs_nfsdserv.c
==============================================================================
--- stable/10/sys/fs/nfsserver/nfs_nfsdserv.c	Thu Apr 30 12:39:24 2015	(r282270)
+++ stable/10/sys/fs/nfsserver/nfs_nfsdserv.c	Thu Apr 30 12:44:20 2015	(r282271)
@@ -870,7 +870,7 @@ nfsrvd_write(struct nfsrv_descript *nd, 
 			i = mbuf_len(mp);
 	}
 
-	if (retlen > NFS_MAXDATA || retlen < 0)
+	if (retlen > NFS_SRVMAXIO || retlen < 0)
 		nd->nd_repstat = EIO;
 	if (vnode_vtype(vp) != VREG && !nd->nd_repstat) {
 		if (nd->nd_flag & ND_NFSV3)



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201504301244.t3UCiLXo003101>