From: Lai Jiangshan Date: Wed, 2 Nov 2011 17:22:30 +0000 (-0400) Subject: rculfhash: Move "struct rcu_head head" out of "struct cds_lfht_node" X-Git-Tag: v0.7.0~43^2~59 X-Git-Url: https://git.lttng.org./?a=commitdiff_plain;h=81d9100507bd6706dada14e1520b40cb1d87ea4f;p=userspace-rcu.git rculfhash: Move "struct rcu_head head" out of "struct cds_lfht_node" It is user's responsibility to free it by call_rcu(), synchronize_rcu() or defer_rcu(). Signed-off-by: Lai Jiangshan Signed-off-by: Mathieu Desnoyers --- diff --git a/tests/test_urcu_hash.c b/tests/test_urcu_hash.c index dbacf73..e28c14a 100644 --- a/tests/test_urcu_hash.c +++ b/tests/test_urcu_hash.c @@ -107,6 +107,8 @@ struct test_data { struct lfht_test_node { struct cds_lfht_node node; + /* cache-cold for iteration */ + struct rcu_head head; }; static inline struct lfht_test_node * @@ -516,7 +518,7 @@ static void free_node_cb(struct rcu_head *head) { struct lfht_test_node *node = - caa_container_of(head, struct lfht_test_node, node.head); + caa_container_of(head, struct lfht_test_node, head); free(node); } @@ -562,7 +564,7 @@ void *thr_writer(void *_count) nr_addexist++; } else { if (add_replace && ret_node) { - call_rcu(&to_test_node(ret_node)->node.head, + call_rcu(&to_test_node(ret_node)->head, free_node_cb); nr_addexist++; } else { @@ -579,7 +581,7 @@ void *thr_writer(void *_count) rcu_read_unlock(); if (ret == 0) { node = cds_lfht_iter_get_test_node(&iter); - call_rcu(&node->node.head, free_node_cb); + call_rcu(&node->head, free_node_cb); nr_del++; } else nr_delnoent++; @@ -653,7 +655,7 @@ static int populate_hash(void) nr_addexist++; } else { if (add_replace && ret_node) { - call_rcu(&to_test_node(ret_node)->node.head, free_node_cb); + call_rcu(&to_test_node(ret_node)->head, free_node_cb); nr_addexist++; } else { nr_add++; @@ -677,7 +679,7 @@ void test_delete_all_nodes(struct cds_lfht *ht) ret = cds_lfht_del(test_ht, &iter); assert(!ret); - call_rcu(&node->node.head, free_node_cb); + call_rcu(&node->head, free_node_cb); cds_lfht_next(ht, &iter); count++; } diff --git a/urcu/rculfhash.h b/urcu/rculfhash.h index 008b1d4..f4f3373 100644 --- a/urcu/rculfhash.h +++ b/urcu/rculfhash.h @@ -62,8 +62,6 @@ struct cds_lfht_node { struct _cds_lfht_node p; /* needs to be first field */ void *key; unsigned int key_len; - /* cache-cold for iteration */ - struct rcu_head head; }; /* cds_lfht_iter: Used to track state while traversing a hash chain. */