#include <urcu-call-rcu.h>
struct rcu_ht_node {
+ /* cache-hot for iteration */
struct rcu_ht_node *next;
- void *key;
- size_t key_len;
- unsigned long hash;
unsigned long reverse_hash;
+ void *key;
+ unsigned int key_len;
unsigned int dummy;
- void *value;
+ /* cache-cold for iteration */
struct rcu_head head;
};
static inline
void ht_node_init(struct rcu_ht_node *node, void *key,
- size_t key_len, void *value)
+ size_t key_len)
{
node->key = key;
node->key_len = key_len;
- node->value = value;
node->dummy = 0;
}
void (*func)(struct rcu_head *head)));
int ht_destroy(struct rcu_ht *ht);
+/* Count the number of nodes in the hash table. Call with rcu_read_lock held. */
+void ht_count_nodes(struct rcu_ht *ht,
+ unsigned long *count,
+ unsigned long *removed);
/* Call with rcu_read_lock held. */
struct rcu_ht_node *ht_lookup(struct rcu_ht *ht, void *key, size_t key_len);