diff options
author | ps <ps@FreeBSD.org> | 2006-04-21 09:25:40 +0000 |
---|---|---|
committer | ps <ps@FreeBSD.org> | 2006-04-21 09:25:40 +0000 |
commit | 10b2fe8deaf19b4c81cb9088e607c6b818b49a2b (patch) | |
tree | 104c2b8ecefe4f49f0608012d591ed6bc153383e /sys/kern/uipc_socket2.c | |
parent | 71dd15704489306788703f67dac59f4814c34efe (diff) | |
download | FreeBSD-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_socket2.c')
-rw-r--r-- | sys/kern/uipc_socket2.c | 26 |
1 files changed, 24 insertions, 2 deletions
diff --git a/sys/kern/uipc_socket2.c b/sys/kern/uipc_socket2.c index 4afe8c5..b18ff4a 100644 --- a/sys/kern/uipc_socket2.c +++ b/sys/kern/uipc_socket2.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, ""); |