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. Tested by: mav Reviewed by: mav MFC after: 2 weeks
This commit is contained in:
parent
7dd824c370
commit
66e80f77d2
@ -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
|
||||
|
||||
|
@ -281,11 +281,11 @@ nfsvno_getfs(struct nfsfsinfo *sip, int isdgram)
|
||||
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;
|
||||
|
@ -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.
|
||||
|
@ -881,7 +881,7 @@ nfsrvd_write(struct nfsrv_descript *nd, __unused int isdgram,
|
||||
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)
|
||||
|
Loading…
x
Reference in New Issue
Block a user