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)
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to