aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRick Macklem <rmacklem@FreeBSD.org>2026-05-14 22:33:23 +0000
committerRick Macklem <rmacklem@FreeBSD.org>2026-05-14 22:33:23 +0000
commitb92b9da3300655c86dcd42ea8a5ba45badd90847 (patch)
tree6bc54707ffcc67de4fe52d31fc7588ba1b3a5a7b
parent13d3bd165e225eec9af91b6e3361c2482931f95b (diff)
nfsd: Allow vfs.nfsd.srvmaxio to be up to 4Mbytes
Without this patch, the maximum setting for vfs.nfsd.srvmaxio was 1Mbyte. This patch increases that to 4Mbytes. The same as for any setting above 128Kbytes, settings up to 4Mbytes require that kern.ipc.maxsockbuf be increased. (A message generated after setting vfs.nfsd.srvmaxio via the /etc/rc.conf variable nfs_server_maxio will indicate the minimum setting, which will be somewhat greater than four times the setting of vfs.nfsd.srvmaxio.) Requested by: Cedric Blancher <cedric.blancher@gmail.com> MFC after: 2 weeks Fixes: 13d3bd165e22 ("subr_uio.c: Remove a KASSERT() for large NFS server I/O")
-rw-r--r--sys/fs/nfs/nfsproto.h3
-rw-r--r--sys/fs/nfsserver/nfs_nfsdport.c5
2 files changed, 6 insertions, 2 deletions
diff --git a/sys/fs/nfs/nfsproto.h b/sys/fs/nfs/nfsproto.h
index 6e67c5be3416..1054c85d8e8f 100644
--- a/sys/fs/nfs/nfsproto.h
+++ b/sys/fs/nfs/nfsproto.h
@@ -89,8 +89,11 @@
* 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.
+ * NFS_SRVMAXIO is the default setting for vfs.nfsd.srvmaxio
+ * NFS_SRVLIMITIO is the maximum setting allowed for vfs.nfsd.srvmaxio
*/
#define NFS_SRVMAXIO (128 * 1024)
+#define NFS_SRVLIMITIO (4 * 1024 * 1024)
/* Stat numbers for rpc returns (version 2, 3 and 4) */
/*
diff --git a/sys/fs/nfsserver/nfs_nfsdport.c b/sys/fs/nfsserver/nfs_nfsdport.c
index e42d5ca1e0a3..1e6936ed351c 100644
--- a/sys/fs/nfsserver/nfs_nfsdport.c
+++ b/sys/fs/nfsserver/nfs_nfsdport.c
@@ -241,8 +241,9 @@ sysctl_srvmaxio(SYSCTL_HANDLER_ARGS)
printf("nfsd: vfs.nfsd.srvmaxio can only be increased\n");
return (EINVAL);
}
- if (newsrvmaxio > 1048576) {
- printf("nfsd: vfs.nfsd.srvmaxio cannot be > 1Mbyte\n");
+ if (newsrvmaxio > NFS_SRVLIMITIO) {
+ printf("nfsd: vfs.nfsd.srvmaxio cannot be > %d\n",
+ NFS_SRVLIMITIO);
return (EINVAL);
}
if ((newsrvmaxio & (newsrvmaxio - 1)) != 0) {