diff options
Diffstat (limited to 'sys/netinet')
-rw-r--r-- | sys/netinet/ip_divert.c | 9 | ||||
-rw-r--r-- | sys/netinet/ip_input.c | 13 | ||||
-rw-r--r-- | sys/netinet/raw_ip.c | 9 | ||||
-rw-r--r-- | sys/netinet/tcp_input.c | 10 | ||||
-rw-r--r-- | sys/netinet/tcp_reass.c | 10 | ||||
-rw-r--r-- | sys/netinet/tcp_subr.c | 11 | ||||
-rw-r--r-- | sys/netinet/tcp_timewait.c | 11 | ||||
-rw-r--r-- | sys/netinet/udp_usrreq.c | 10 |
8 files changed, 83 insertions, 0 deletions
diff --git a/sys/netinet/ip_divert.c b/sys/netinet/ip_divert.c index 8cfad6b..2b14f44 100644 --- a/sys/netinet/ip_divert.c +++ b/sys/netinet/ip_divert.c @@ -116,6 +116,13 @@ static u_long div_recvspace = DIVRCVQ; /* XXX sysctl ? */ /* * Initialize divert connection block queue. */ +static void +div_zone_change(void *tag) +{ + + uma_zone_set_max(divcbinfo.ipi_zone, maxsockets); +} + void div_init(void) { @@ -132,6 +139,8 @@ div_init(void) divcbinfo.ipi_zone = uma_zcreate("divcb", sizeof(struct inpcb), NULL, NULL, NULL, NULL, UMA_ALIGN_PTR, UMA_ZONE_NOFREE); uma_zone_set_max(divcbinfo.ipi_zone, maxsockets); + EVENTHANDLER_REGISTER(maxsockets_change, div_zone_change, + NULL, EVENTHANDLER_PRI_ANY); } /* diff --git a/sys/netinet/ip_input.c b/sys/netinet/ip_input.c index 00667a5..02d2d12 100644 --- a/sys/netinet/ip_input.c +++ b/sys/netinet/ip_input.c @@ -167,6 +167,7 @@ static struct mtx ipqlock; #define IPQ_LOCK_ASSERT() mtx_assert(&ipqlock, MA_OWNED) static void maxnipq_update(void); +static void ipq_zone_change(void *); static int maxnipq; /* Administrative limit on # reass queues. */ static int nipq = 0; /* Total # of reass queues */ @@ -256,6 +257,8 @@ ip_init() ipport_tick(NULL); EVENTHANDLER_REGISTER(shutdown_pre_sync, ip_fini, NULL, SHUTDOWN_PRI_DEFAULT); + EVENTHANDLER_REGISTER(nmbclusters_change, ipq_zone_change, + NULL, EVENTHANDLER_PRI_ANY); /* Initialize various other remaining things. */ ip_id = time_second & 0xffff; @@ -687,6 +690,16 @@ maxnipq_update(void) uma_zone_set_max(ipq_zone, 1); } +static void +ipq_zone_change(void *tag) +{ + + if (maxnipq > 0 && maxnipq < (nmbclusters / 32)) { + maxnipq = nmbclusters / 32; + maxnipq_update(); + } +} + static int sysctl_maxnipq(SYSCTL_HANDLER_ARGS) { diff --git a/sys/netinet/raw_ip.c b/sys/netinet/raw_ip.c index 7d6e5b3..7a7890a 100644 --- a/sys/netinet/raw_ip.c +++ b/sys/netinet/raw_ip.c @@ -116,6 +116,13 @@ void (*ip_rsvp_force_done)(struct socket *); /* * Initialize raw connection block q. */ +static void +rip_zone_change(void *tag) +{ + + uma_zone_set_max(ripcbinfo.ipi_zone, maxsockets); +} + void rip_init() { @@ -132,6 +139,8 @@ rip_init() ripcbinfo.ipi_zone = uma_zcreate("ripcb", sizeof(struct inpcb), NULL, NULL, NULL, NULL, UMA_ALIGN_PTR, UMA_ZONE_NOFREE); uma_zone_set_max(ripcbinfo.ipi_zone, maxsockets); + EVENTHANDLER_REGISTER(maxsockets_change, rip_zone_change, + NULL, EVENTHANDLER_PRI_ANY); } static struct sockaddr_in ripsrc = { sizeof(ripsrc), AF_INET }; diff --git a/sys/netinet/tcp_input.c b/sys/netinet/tcp_input.c index c31892c..90957ce 100644 --- a/sys/netinet/tcp_input.c +++ b/sys/netinet/tcp_input.c @@ -202,6 +202,14 @@ do { \ (tcp_delack_enabled || (tp->t_flags & TF_NEEDSYN))) /* Initialize TCP reassembly queue */ +static void +tcp_reass_zone_change(void *tag) +{ + + tcp_reass_maxseg = nmbclusters / 16; + uma_zone_set_max(tcp_reass_zone, tcp_reass_maxseg); +} + uma_zone_t tcp_reass_zone; void tcp_reass_init() @@ -212,6 +220,8 @@ tcp_reass_init() tcp_reass_zone = uma_zcreate("tcpreass", sizeof (struct tseg_qent), NULL, NULL, NULL, NULL, UMA_ALIGN_PTR, UMA_ZONE_NOFREE); uma_zone_set_max(tcp_reass_zone, tcp_reass_maxseg); + EVENTHANDLER_REGISTER(nmbclusters_change, + tcp_reass_zone_change, NULL, EVENTHANDLER_PRI_ANY); } static int diff --git a/sys/netinet/tcp_reass.c b/sys/netinet/tcp_reass.c index c31892c..90957ce 100644 --- a/sys/netinet/tcp_reass.c +++ b/sys/netinet/tcp_reass.c @@ -202,6 +202,14 @@ do { \ (tcp_delack_enabled || (tp->t_flags & TF_NEEDSYN))) /* Initialize TCP reassembly queue */ +static void +tcp_reass_zone_change(void *tag) +{ + + tcp_reass_maxseg = nmbclusters / 16; + uma_zone_set_max(tcp_reass_zone, tcp_reass_maxseg); +} + uma_zone_t tcp_reass_zone; void tcp_reass_init() @@ -212,6 +220,8 @@ tcp_reass_init() tcp_reass_zone = uma_zcreate("tcpreass", sizeof (struct tseg_qent), NULL, NULL, NULL, NULL, UMA_ALIGN_PTR, UMA_ZONE_NOFREE); uma_zone_set_max(tcp_reass_zone, tcp_reass_maxseg); + EVENTHANDLER_REGISTER(nmbclusters_change, + tcp_reass_zone_change, NULL, EVENTHANDLER_PRI_ANY); } static int diff --git a/sys/netinet/tcp_subr.c b/sys/netinet/tcp_subr.c index a6e6ab8..92da5c5 100644 --- a/sys/netinet/tcp_subr.c +++ b/sys/netinet/tcp_subr.c @@ -248,6 +248,15 @@ struct callout isn_callout; /* * TCP initialization. */ +static void +tcp_zone_change(void *tag) +{ + + uma_zone_set_max(tcbinfo.ipi_zone, maxsockets); + uma_zone_set_max(tcpcb_zone, maxsockets); + uma_zone_set_max(tcptw_zone, maxsockets / 5); +} + void tcp_init(void) { @@ -310,6 +319,8 @@ tcp_init(void) SHUTDOWN_PRI_DEFAULT); sack_hole_zone = uma_zcreate("sackhole", sizeof(struct sackhole), NULL, NULL, NULL, NULL, UMA_ALIGN_PTR, UMA_ZONE_NOFREE); + EVENTHANDLER_REGISTER(maxsockets_change, tcp_zone_change, NULL, + EVENTHANDLER_PRI_ANY); } void diff --git a/sys/netinet/tcp_timewait.c b/sys/netinet/tcp_timewait.c index a6e6ab8..92da5c5 100644 --- a/sys/netinet/tcp_timewait.c +++ b/sys/netinet/tcp_timewait.c @@ -248,6 +248,15 @@ struct callout isn_callout; /* * TCP initialization. */ +static void +tcp_zone_change(void *tag) +{ + + uma_zone_set_max(tcbinfo.ipi_zone, maxsockets); + uma_zone_set_max(tcpcb_zone, maxsockets); + uma_zone_set_max(tcptw_zone, maxsockets / 5); +} + void tcp_init(void) { @@ -310,6 +319,8 @@ tcp_init(void) SHUTDOWN_PRI_DEFAULT); sack_hole_zone = uma_zcreate("sackhole", sizeof(struct sackhole), NULL, NULL, NULL, NULL, UMA_ALIGN_PTR, UMA_ZONE_NOFREE); + EVENTHANDLER_REGISTER(maxsockets_change, tcp_zone_change, NULL, + EVENTHANDLER_PRI_ANY); } void diff --git a/sys/netinet/udp_usrreq.c b/sys/netinet/udp_usrreq.c index e00892d..fb0b76a 100644 --- a/sys/netinet/udp_usrreq.c +++ b/sys/netinet/udp_usrreq.c @@ -38,6 +38,7 @@ #include <sys/param.h> #include <sys/systm.h> #include <sys/domain.h> +#include <sys/eventhandler.h> #include <sys/jail.h> #include <sys/kernel.h> #include <sys/lock.h> @@ -129,6 +130,13 @@ static void udp_detach(struct socket *so); static int udp_output(struct inpcb *, struct mbuf *, struct sockaddr *, struct mbuf *, struct thread *); +static void +udp_zone_change(void *tag) +{ + + uma_zone_set_max(udbinfo.ipi_zone, maxsockets); +} + void udp_init() { @@ -141,6 +149,8 @@ udp_init() udbinfo.ipi_zone = uma_zcreate("udpcb", sizeof(struct inpcb), NULL, NULL, NULL, NULL, UMA_ALIGN_PTR, UMA_ZONE_NOFREE); uma_zone_set_max(udbinfo.ipi_zone, maxsockets); + EVENTHANDLER_REGISTER(maxsockets_change, udp_zone_change, NULL, + EVENTHANDLER_PRI_ANY); } void |