svn commit: r282677 - in stable/9/sys/fs: nfs nfsserver
Rick Macklem
rmacklem at FreeBSD.org
Sat May 9 12:11:01 UTC 2015
Author: rmacklem
Date: Sat May 9 12:10:59 2015
New Revision: 282677
URL: https://svnweb.freebsd.org/changeset/base/282677
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/9/sys/fs/nfs/nfs.h
stable/9/sys/fs/nfs/nfs_commonport.c
stable/9/sys/fs/nfs/nfsproto.h
stable/9/sys/fs/nfsserver/nfs_nfsdserv.c
Directory Properties:
stable/9/sys/ (props changed)
stable/9/sys/fs/ (props changed)
Modified: stable/9/sys/fs/nfs/nfs.h
==============================================================================
--- stable/9/sys/fs/nfs/nfs.h Sat May 9 09:21:59 2015 (r282676)
+++ stable/9/sys/fs/nfs/nfs.h Sat May 9 12:10:59 2015 (r282677)
@@ -151,7 +151,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/9/sys/fs/nfs/nfs_commonport.c
==============================================================================
--- stable/9/sys/fs/nfs/nfs_commonport.c Sat May 9 09:21:59 2015 (r282676)
+++ stable/9/sys/fs/nfs/nfs_commonport.c Sat May 9 12:10:59 2015 (r282677)
@@ -274,11 +274,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/9/sys/fs/nfs/nfsproto.h
==============================================================================
--- stable/9/sys/fs/nfs/nfsproto.h Sat May 9 09:21:59 2015 (r282676)
+++ stable/9/sys/fs/nfs/nfsproto.h Sat May 9 12:10:59 2015 (r282677)
@@ -54,17 +54,28 @@
#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 */
#define NFSV4_CBVERS 1 /* V4 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/9/sys/fs/nfsserver/nfs_nfsdserv.c
==============================================================================
--- stable/9/sys/fs/nfsserver/nfs_nfsdserv.c Sat May 9 09:21:59 2015 (r282676)
+++ stable/9/sys/fs/nfsserver/nfs_nfsdserv.c Sat May 9 12:10:59 2015 (r282677)
@@ -862,7 +862,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)
More information about the svn-src-stable-9
mailing list