summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
3c69207)
It is user's responsibility to free it by call_rcu(),
synchronize_rcu() or defer_rcu().
Signed-off-by: Lai Jiangshan <laijs@cn.fujitsu.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
struct lfht_test_node {
struct cds_lfht_node node;
struct lfht_test_node {
struct cds_lfht_node node;
+ /* cache-cold for iteration */
+ struct rcu_head head;
};
static inline struct lfht_test_node *
};
static inline struct lfht_test_node *
void free_node_cb(struct rcu_head *head)
{
struct lfht_test_node *node =
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);
nr_addexist++;
} else {
if (add_replace && ret_node) {
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 {
free_node_cb);
nr_addexist++;
} else {
rcu_read_unlock();
if (ret == 0) {
node = cds_lfht_iter_get_test_node(&iter);
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++;
nr_del++;
} else
nr_delnoent++;
nr_addexist++;
} else {
if (add_replace && ret_node) {
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++;
nr_addexist++;
} else {
nr_add++;
ret = cds_lfht_del(test_ht, &iter);
assert(!ret);
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++;
}
cds_lfht_next(ht, &iter);
count++;
}
struct _cds_lfht_node p; /* needs to be first field */
void *key;
unsigned int key_len;
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. */
};
/* cds_lfht_iter: Used to track state while traversing a hash chain. */