summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjeff <jeff@FreeBSD.org>2002-03-20 04:39:32 +0000
committerjeff <jeff@FreeBSD.org>2002-03-20 04:39:32 +0000
commit803cb2a2ba1f8847bbb7ea2f1c36cfc14a645091 (patch)
treebbc92e42ed6a1f0d410188d2ce1e6e8d1096b4d7
parent622e42f19462cd07c1cbcbc13be5f4003e6e8d1c (diff)
downloadFreeBSD-src-803cb2a2ba1f8847bbb7ea2f1c36cfc14a645091.zip
FreeBSD-src-803cb2a2ba1f8847bbb7ea2f1c36cfc14a645091.tar.gz
Backout part of my previous commit; I was wrong about vm_zone's handling of
limits on zones w/o objects.
-rw-r--r--sys/kern/uipc_sockbuf.c14
-rw-r--r--sys/kern/uipc_socket2.c14
-rw-r--r--sys/sys/socketvar.h1
3 files changed, 29 insertions, 0 deletions
diff --git a/sys/kern/uipc_sockbuf.c b/sys/kern/uipc_sockbuf.c
index 3145e3f..40907f9 100644
--- a/sys/kern/uipc_sockbuf.c
+++ b/sys/kern/uipc_sockbuf.c
@@ -55,6 +55,8 @@
#include <sys/aio.h> /* for aio_swake proto */
#include <sys/event.h>
+int maxsockets;
+
void (*aio_swake)(struct socket *, struct sockbuf *);
/*
@@ -1002,5 +1004,17 @@ SYSCTL_INT(_kern, KERN_DUMMY, dummy, CTLFLAG_RW, &dummy, 0, "");
SYSCTL_INT(_kern_ipc, KIPC_MAXSOCKBUF, maxsockbuf, CTLFLAG_RW,
&sb_max, 0, "Maximum socket buffer size");
+SYSCTL_INT(_kern_ipc, OID_AUTO, maxsockets, CTLFLAG_RD,
+ &maxsockets, 0, "Maximum number of sockets avaliable");
SYSCTL_INT(_kern_ipc, KIPC_SOCKBUF_WASTE, sockbuf_waste_factor, CTLFLAG_RW,
&sb_efficiency, 0, "");
+
+/*
+ * Initialise maxsockets
+ */
+static void init_maxsockets(void *ignored)
+{
+ TUNABLE_INT_FETCH("kern.ipc.maxsockets", &maxsockets);
+ maxsockets = imax(maxsockets, imax(maxfiles, nmbclusters));
+}
+SYSINIT(param, SI_SUB_TUNABLES, SI_ORDER_ANY, init_maxsockets, NULL);
diff --git a/sys/kern/uipc_socket2.c b/sys/kern/uipc_socket2.c
index 3145e3f..40907f9 100644
--- a/sys/kern/uipc_socket2.c
+++ b/sys/kern/uipc_socket2.c
@@ -55,6 +55,8 @@
#include <sys/aio.h> /* for aio_swake proto */
#include <sys/event.h>
+int maxsockets;
+
void (*aio_swake)(struct socket *, struct sockbuf *);
/*
@@ -1002,5 +1004,17 @@ SYSCTL_INT(_kern, KERN_DUMMY, dummy, CTLFLAG_RW, &dummy, 0, "");
SYSCTL_INT(_kern_ipc, KIPC_MAXSOCKBUF, maxsockbuf, CTLFLAG_RW,
&sb_max, 0, "Maximum socket buffer size");
+SYSCTL_INT(_kern_ipc, OID_AUTO, maxsockets, CTLFLAG_RD,
+ &maxsockets, 0, "Maximum number of sockets avaliable");
SYSCTL_INT(_kern_ipc, KIPC_SOCKBUF_WASTE, sockbuf_waste_factor, CTLFLAG_RW,
&sb_efficiency, 0, "");
+
+/*
+ * Initialise maxsockets
+ */
+static void init_maxsockets(void *ignored)
+{
+ TUNABLE_INT_FETCH("kern.ipc.maxsockets", &maxsockets);
+ maxsockets = imax(maxsockets, imax(maxfiles, nmbclusters));
+}
+SYSINIT(param, SI_SUB_TUNABLES, SI_ORDER_ANY, init_maxsockets, NULL);
diff --git a/sys/sys/socketvar.h b/sys/sys/socketvar.h
index 9ba2d92..c31eb58 100644
--- a/sys/sys/socketvar.h
+++ b/sys/sys/socketvar.h
@@ -318,6 +318,7 @@ MALLOC_DECLARE(M_SONAME);
MALLOC_DECLARE(M_ACCF);
#endif
+extern int maxsockets;
extern u_long sb_max;
extern uma_zone_t socket_zone;
extern so_gen_t so_gencnt;
OpenPOWER on IntegriCloud