hashinit(9)
NAME
hashinit, hashdestroy, phashinit - manage kernel hash tables
SYNOPSIS
#include <sys/malloc.h> #include <sys/systm.h> #include <sys/queue.h> void * hashinit(int nelements, struct malloc_type *type, u_long *hashmask); void hashdestroy(void *hashtbl, struct malloc_type *type, u_long hashmask); void * phashinit(int nelements, struct malloc_type *type, u_long *nentries);
DESCRIPTION
- The hashinit() and phashinit() functions allocate space for
- hash tables
of size given by the argument nelements. - The hashinit() function allocates hash tables that are sized
- to largest
power of two less than or equal to argument nelements. The - phashinit()
function allocates hash tables that are sized to the largest - prime number
less than or equal to argument nelements. Allocated hash - tables are contiguous arrays of LIST_HEAD(3) entries, allocated using mal
- loc(9), and
initialized using LIST_INIT(3). The malloc arena to be used - for allocation is pointed to by argument type.
- The hashdestroy() function frees the space occupied by the
- hash table
pointed to by argument hashtbl. Argument type determines - the malloc
arena to use when freeing space. The argument hashmask - should be the bit
mask returned by the call to hashinit() that allocated the - hash table.
IMPLEMENTATION NOTES
The largest prime hash value chosen by phashinit() is 32749.
RETURN VALUES
- The hashinit() function returns a pointer to an allocated
- hash table and
sets the location pointed to by hashmask to the bit mask to - be used for
computing the correct slot in the hash table. - The phashinit() function returns a pointer to an allocated
- hash table and
sets the location pointed to by nentries to the number of - rows in the
hash table.
EXAMPLES
- A typical example is shown below:
- ...
static LIST_HEAD(foo, foo) *footable;
static u_long foomask;
...
footable = hashinit(32, M_FOO, &foomask); - Here we allocate a hash table with 32 entries from the mal
- loc arena
pointed to by M_FOO. The mask for the allocated hash table - is returned
in foomask. A subsequent call to hashdestroy() uses the - value in
foomask:
...
hashdestroy(footable, M_FOO, foomask);
DIAGNOSTICS
- The hashinit() and phashinit() functions will panic if argu
- ment nelements
is less than or equal to zero. - The hashdestroy() function will panic if the hash table
- pointed to by
hashtbl is not empty.
SEE ALSO
BUGS
- There is no phashdestroy() function, and using hashdestroy()
- to free a
hash table allocated by phashinit() usually has grave conse - quences.
- BSD October 10, 2004