Here is more cleanup.
Kill the MKget MKfree madness and replace it with *drummrolls*
a pool(9). Makes the code a lot easier to digest.
--
:wq Claudio
Index: net/radix.c
===================================================================
RCS file: /cvs/src/sys/net/radix.c,v
retrieving revision 1.35
diff -u -p -r1.35 radix.c
--- net/radix.c 19 Jan 2014 04:04:36 -0000 1.35
+++ net/radix.c 19 Jan 2014 04:39:27 -0000
@@ -41,6 +41,7 @@
#include <sys/malloc.h>
#include <sys/domain.h>
#include <sys/syslog.h>
+#include <sys/pool.h>
#include <net/radix.h>
#ifndef SMALL_KERNEL
@@ -50,12 +51,13 @@
#endif
int max_keylen;
-struct radix_mask *rn_mkfreelist;
struct radix_node_head *mask_rnhead;
static char *addmask_key;
static char normal_chars[] = {0, 0x80, 0xc0, 0xe0, 0xf0, 0xf8, 0xfc, 0xfe, -1};
static char *rn_zeros, *rn_ones;
+struct pool rtmask_pool; /* pool for radix_mask structures */
+
#define rn_masktop (mask_rnhead->rnh_treetop)
static int rn_satisfies_leaf(char *, struct radix_node *, int);
@@ -69,20 +71,6 @@ struct radix_node *rn_newpair(void *, in
struct radix_node *rn_search(void *, struct radix_node *);
struct radix_node *rn_search_m(void *, struct radix_node *, void *);
-#define MKGet(m) do { \
- if (rn_mkfreelist) { \
- m = rn_mkfreelist; \
- rn_mkfreelist = (m)->rm_mklist; \
- } else \
- m = malloc(sizeof (*(m)), M_RTABLE, M_NOWAIT); \
-} while (0)
-
-#define MKFree(m) do { \
- (m)->rm_mklist = rn_mkfreelist; \
- rn_mkfreelist = (m); \
-} while (0)
-
-
/*
* The data structure for the keys is a radix tree with one way
* branching removed. The index rn_b at an internal node n represents a bit
@@ -506,7 +494,7 @@ rn_new_radix_mask(struct radix_node *tt,
{
struct radix_mask *m;
- MKGet(m);
+ m = pool_get(&rtmask_pool, PR_NOWAIT | PR_ZERO);
if (m == NULL) {
log(LOG_ERR, "Mask for route not entered\n");
return (0);
@@ -841,7 +829,7 @@ rn_delete(void *v_arg, void *netmask_arg
for (mp = &x->rn_mklist; (m = *mp); mp = &m->rm_mklist)
if (m == saved_m) {
*mp = m->rm_mklist;
- MKFree(m);
+ pool_put(&rtmask_pool, m);
break;
}
if (m == NULL) {
@@ -928,7 +916,7 @@ on1:
struct radix_mask *mm = m->rm_mklist;
x->rn_mklist = 0;
if (--(m->rm_refs) < 0)
- MKFree(m);
+ pool_put(&rtmask_pool, m);
else if (m->rm_flags & RNF_NORMAL)
/*
* don't progress because this
@@ -1046,11 +1034,13 @@ rn_inithead0(struct radix_node_head *rnh
}
void
-rn_init()
+rn_init(void)
{
char *cp, *cplim;
struct domain *dom;
+ pool_init(&rtmask_pool, sizeof(struct radix_mask), 0, 0, 0, "rtmskpl",
+ NULL);
for (dom = domains; dom; dom = dom->dom_next)
if (dom->dom_maxrtkey > max_keylen)
max_keylen = dom->dom_maxrtkey;