Index: kernel/generic/include/adt/cht.h
===================================================================
--- kernel/generic/include/adt/cht.h	(revision 4ec9ea4158674bc15f751d826091779955c286a4)
+++ kernel/generic/include/adt/cht.h	(revision d99fac96cbfec51361fae6794a980aa1ef9bc770)
@@ -40,4 +40,5 @@
 #include <synch/rcu.h>
 #include <macros.h>
+#include <synch/workqueue.h>
 
 typedef uintptr_t cht_ptr_t;
@@ -53,5 +54,5 @@
 /** Set of operations for a concurrent hash table. */
 typedef struct cht_ops {
-	size_t (*hash)(cht_link_t *node);
+	size_t (*hash)(const cht_link_t *item);
 	size_t (*key_hash)(void *key);
 	bool (*equal)(const cht_link_t *item1, const cht_link_t *item2);
@@ -70,8 +71,11 @@
 	cht_ops_t *op;
 	
+	size_t min_order;
 	cht_buckets_t *b;
 	cht_buckets_t *new_b;
+
+	work_t resize_work;
+	atomic_t resize_reqs;
 	
-	atomic_t resize_reqs;
 	atomic_t item_cnt;
 } cht_t;
@@ -84,9 +88,12 @@
 #define cht_read_unlock()   rcu_read_unlock()
 
-extern void cht_create(cht_t *h, size_t init_size, cht_ops_t *op);
+extern bool cht_create(cht_t *h, size_t init_size, size_t min_size, cht_ops_t *op);
 extern void cht_destroy(cht_t *h);
 
 extern cht_link_t *cht_find(cht_t *h, void *key);
 extern cht_link_t *cht_find_lazy(cht_t *h, void *key);
+extern cht_link_t *cht_find_next(cht_t *h, const cht_link_t *item);
+extern cht_link_t *cht_find_next_lazy(cht_t *h, const cht_link_t *item);
+
 extern void cht_insert(cht_t *h, cht_link_t *item);
 extern bool cht_insert_unique(cht_t *h, cht_link_t *item);
Index: kernel/generic/include/adt/hash.h
===================================================================
--- kernel/generic/include/adt/hash.h	(revision 4ec9ea4158674bc15f751d826091779955c286a4)
+++ kernel/generic/include/adt/hash.h	(revision d99fac96cbfec51361fae6794a980aa1ef9bc770)
@@ -37,6 +37,5 @@
 #include <stdint.h>
 
-/** Produces a uniform hash affecting all output bits from the skewed input.
- */
+/** Produces a uniform hash affecting all output bits from the skewed input. */
 static inline uint32_t hash_mix32(uint32_t hash)
 {
@@ -55,6 +54,5 @@
 }
 
-/** Produces a uniform hash affecting all output bits from the skewed input.
- */
+/** Produces a uniform hash affecting all output bits from the skewed input. */
 static inline uint64_t hash_mix64(uint64_t hash)
 {
@@ -68,8 +66,8 @@
 	hash = hash * 0x27d4eb2d;
 	hash = hash ^ (hash >> 15);	
+	return hash;
 }
 
-/** Produces a uniform hash affecting all output bits from the skewed input.
- */
+/** Produces a uniform hash affecting all output bits from the skewed input. */
 static inline size_t hash_mix(size_t hash) 
 {
