diff options
author | ru <ru@FreeBSD.org> | 2005-02-05 08:28:36 +0000 |
---|---|---|
committer | ru <ru@FreeBSD.org> | 2005-02-05 08:28:36 +0000 |
commit | 690fdeacb33ba6e423217f4f5304034ef686e14f (patch) | |
tree | bfef15bd02ae3fbb3862287846c919bc7439e24a /sys/netgraph/ng_fec.c | |
parent | 7fde123e3aaa0702eb5ae71dc1a8b48e04f7e654 (diff) | |
download | FreeBSD-src-690fdeacb33ba6e423217f4f5304034ef686e14f.zip FreeBSD-src-690fdeacb33ba6e423217f4f5304034ef686e14f.tar.gz |
Create a per-module mutex on MOD_LOAD, and destroy it on MOD_UNLOAD.
(This fixes witness_destroy() panic after module unload.)
OK'ed by: rwatson, julian
Diffstat (limited to 'sys/netgraph/ng_fec.c')
-rw-r--r-- | sys/netgraph/ng_fec.c | 25 |
1 files changed, 24 insertions, 1 deletions
diff --git a/sys/netgraph/ng_fec.c b/sys/netgraph/ng_fec.c index c35f3b5..e9c8ce4 100644 --- a/sys/netgraph/ng_fec.c +++ b/sys/netgraph/ng_fec.c @@ -204,6 +204,7 @@ static void ng_fec_print_ioctl(struct ifnet *ifp, int cmd, caddr_t data); #endif /* Netgraph methods */ +static int ng_fec_mod_event(module_t, int, void *); static ng_constructor_t ng_fec_constructor; static ng_rcvmsg_t ng_fec_rcvmsg; static ng_shutdown_t ng_fec_shutdown; @@ -245,6 +246,7 @@ static const struct ng_cmdlist ng_fec_cmds[] = { static struct ng_type typestruct = { .version = NG_ABI_VERSION, .name = NG_FEC_NODE_TYPE, + .mod_event = ng_fec_mod_event, .constructor = ng_fec_constructor, .rcvmsg = ng_fec_rcvmsg, .shutdown = ng_fec_shutdown, @@ -261,7 +263,6 @@ static int ng_units_in_use = 0; #define UNITS_BITSPERWORD (sizeof(*ng_fec_units) * NBBY) static struct mtx ng_fec_mtx; -MTX_SYSINIT(ng_fec, &ng_fec_mtx, "ng_fec", MTX_DEF); /* * Find the first free unit number for a new interface. @@ -1243,3 +1244,25 @@ ng_fec_shutdown(node_p node) NG_NODE_UNREF(node); return (0); } + +/* + * Handle loading and unloading for this node type. + */ +static int +ng_fec_mod_event(module_t mod, int event, void *data) +{ + int error = 0; + + switch (event) { + case MOD_LOAD: + mtx_init(&ng_fec_mtx, "ng_fec", NULL, MTX_DEF); + break; + case MOD_UNLOAD: + mtx_destroy(&ng_fec_mtx); + break; + default: + error = EOPNOTSUPP; + break; + } + return (error); +} |