slab: Use BSD_LISTs for the bufctls
authorBarret Rhoden <brho@cs.berkeley.edu>
Sun, 30 Oct 2016 22:23:00 +0000 (18:23 -0400)
committerBarret Rhoden <brho@cs.berkeley.edu>
Tue, 29 Nov 2016 16:27:40 +0000 (11:27 -0500)
commit527545e9936bd65a03d47a50860aac9376e9c8ac
tree68230c890ec66a4f7c606e52eda02588b354b532
parent079986b1499209e4803a505928618e855e0a44fa
slab: Use BSD_LISTs for the bufctls

The slab allocator has a long-standing TODO: BUF.  Instead of using a
hash table to lookup a large object, we just used storage in the object
itself.  This was okay, other than possible fragmentation effects, but
it meant that the slab allocator touched every object it tracked.  We'll
eventually need an option to have "NO_TOUCH" slab allocators, where they
do not touch the objects they are tracking.  To do that, we'll need a
hash table.

This commit switches the bufctl struct from a TAILQ to a BSD_LIST, which
will make the hash table entries smaller.  This also fixes a FOREACH
freeing bug. (use FOREACH_SAFE).

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
kern/include/slab.h
kern/src/slab.c