summaryrefslogtreecommitdiffstats
path: root/sys/kern/uipc_sockbuf.c
diff options
context:
space:
mode:
authorps <ps@FreeBSD.org>2006-04-21 09:25:40 +0000
committerps <ps@FreeBSD.org>2006-04-21 09:25:40 +0000
commit10b2fe8deaf19b4c81cb9088e607c6b818b49a2b (patch)
tree104c2b8ecefe4f49f0608012d591ed6bc153383e /sys/kern/uipc_sockbuf.c
parent71dd15704489306788703f67dac59f4814c34efe (diff)
downloadFreeBSD-src-10b2fe8deaf19b4c81cb9088e607c6b818b49a2b.zip
FreeBSD-src-10b2fe8deaf19b4c81cb9088e607c6b818b49a2b.tar.gz
Allow for nmbclusters and maxsockets to be increased via sysctl.
An eventhandler is used to update all the various zones that depend on these values.
Diffstat (limited to 'sys/kern/uipc_sockbuf.c')
-rw-r--r--sys/kern/uipc_sockbuf.c26
1 files changed, 24 insertions, 2 deletions
diff --git a/sys/kern/uipc_sockbuf.c b/sys/kern/uipc_sockbuf.c
index 4afe8c5..b18ff4a 100644
--- a/sys/kern/uipc_sockbuf.c
+++ b/sys/kern/uipc_sockbuf.c
@@ -39,6 +39,7 @@ __FBSDID("$FreeBSD$");
#include <sys/aio.h> /* for aio_swake proto */
#include <sys/domain.h>
#include <sys/event.h>
+#include <sys/eventhandler.h>
#include <sys/file.h> /* for maxfiles */
#include <sys/kernel.h>
#include <sys/lock.h>
@@ -1508,8 +1509,29 @@ static int dummy;
SYSCTL_INT(_kern, KERN_DUMMY, dummy, CTLFLAG_RW, &dummy, 0, "");
SYSCTL_OID(_kern_ipc, KIPC_MAXSOCKBUF, maxsockbuf, CTLTYPE_ULONG|CTLFLAG_RW,
&sb_max, 0, sysctl_handle_sb_max, "LU", "Maximum socket buffer size");
-SYSCTL_INT(_kern_ipc, OID_AUTO, maxsockets, CTLFLAG_RDTUN,
- &maxsockets, 0, "Maximum number of sockets avaliable");
+static int
+sysctl_maxsockets(SYSCTL_HANDLER_ARGS)
+{
+ int error, newmaxsockets;
+
+ newmaxsockets = maxsockets;
+ error = sysctl_handle_int(oidp, &newmaxsockets, sizeof(int), req);
+ if (error == 0 && req->newptr) {
+ if (newmaxsockets > maxsockets) {
+ maxsockets = newmaxsockets;
+ if (maxsockets > ((maxfiles / 4) * 3)) {
+ maxfiles = (maxsockets * 5) / 4;
+ maxfilesperproc = (maxfiles * 9) / 10;
+ }
+ EVENTHANDLER_INVOKE(maxsockets_change);
+ } else
+ error = EINVAL;
+ }
+ return (error);
+}
+SYSCTL_PROC(_kern_ipc, OID_AUTO, maxsockets, CTLTYPE_INT|CTLFLAG_RW,
+ &maxsockets, 0, sysctl_maxsockets, "IU",
+ "Maximum number of sockets avaliable");
SYSCTL_ULONG(_kern_ipc, KIPC_SOCKBUF_WASTE, sockbuf_waste_factor, CTLFLAG_RW,
&sb_efficiency, 0, "");
OpenPOWER on IntegriCloud