summaryrefslogtreecommitdiffstats
path: root/sys/netinet/cc
diff options
context:
space:
mode:
authorlstewart <lstewart@FreeBSD.org>2010-11-16 07:09:05 +0000
committerlstewart <lstewart@FreeBSD.org>2010-11-16 07:09:05 +0000
commitc28db57abb39d3a184fc1946ad3108a57c5b5c69 (patch)
tree747e17b148f47a55c6ded509daf4405c3e6286ab /sys/netinet/cc
parent19dbb181633741563c511cf84ab2439b4e381d47 (diff)
downloadFreeBSD-src-c28db57abb39d3a184fc1946ad3108a57c5b5c69.zip
FreeBSD-src-c28db57abb39d3a184fc1946ad3108a57c5b5c69.tar.gz
cc_init() should only be run once on system boot, but with VIMAGE kernels it
runs on boot and each time a vnet jail is created. Running cc_init() multiple times results in a panic when attempting to initialise the cc_list lock again, and so r215166 effectively broke the use of vnet jails. Switch to using a SYSINIT to run cc_init() on boot. CC algorithm modules loaded on boot register in the same SI_SUB_PROTO_IFATTACHDOMAIN category as is used in this patch, so cc_init() is run at SI_ORDER_FIRST to ensure the framework is initialised before module registration is attempted. Sponsored by: FreeBSD Foundation Reported and tested by: Mikolaj Golub <to.my.trociny at gmail com> MFC after: 11 weeks X-MFC with: r215166
Diffstat (limited to 'sys/netinet/cc')
-rw-r--r--sys/netinet/cc/cc.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/sys/netinet/cc/cc.c b/sys/netinet/cc/cc.c
index 4643ca4..de83aaf 100644
--- a/sys/netinet/cc/cc.c
+++ b/sys/netinet/cc/cc.c
@@ -176,8 +176,8 @@ cc_list_available(SYSCTL_HANDLER_ARGS)
/*
* Initialise CC subsystem on system boot.
*/
-void
-cc_init()
+static void
+cc_init(void)
{
CC_LIST_LOCK_INIT();
STAILQ_INIT(&cc_list);
@@ -328,6 +328,8 @@ cc_modevent(module_t mod, int event_type, void *data)
return (err);
}
+SYSINIT(cc, SI_SUB_PROTO_IFATTACHDOMAIN, SI_ORDER_FIRST, cc_init, NULL);
+
/* Declare sysctl tree and populate it. */
SYSCTL_NODE(_net_inet_tcp, OID_AUTO, cc, CTLFLAG_RW, NULL,
"congestion control related settings");
OpenPOWER on IntegriCloud