projects
/
urcu.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
rculfhash: remove unneeded conversion
[urcu.git]
/
rculfhash.c
diff --git
a/rculfhash.c
b/rculfhash.c
index 75e5ece96c9edb3e462b861fe61e682561d7a1c4..958982bf40a420f4c8d15103591d3e8ce8c79524 100644
(file)
--- a/
rculfhash.c
+++ b/
rculfhash.c
@@
-779,9
+779,9
@@
int _cds_lfht_replace(struct cds_lfht *ht, unsigned long size,
*/
return -ENOENT;
}
*/
return -ENOENT;
}
- assert(
!is_bucket
(old_next));
- assert(new_node !=
clear_flag(old_next)
);
- new_node->next =
clear_flag(old_next)
;
+ assert(
old_next == clear_flag
(old_next));
+ assert(new_node !=
old_next
);
+ new_node->next =
old_next
;
/*
* Here is the whole trick for lock-free replace: we add
* the replacement node _after_ the node we want to
/*
* Here is the whole trick for lock-free replace: we add
* the replacement node _after_ the node we want to
@@
-1471,7
+1471,7
@@
void cds_lfht_add(struct cds_lfht *ht, unsigned long hash,
{
unsigned long size;
{
unsigned long size;
- node->reverse_hash = bit_reverse_ulong(
(unsigned long)
hash);
+ node->reverse_hash = bit_reverse_ulong(hash);
size = rcu_dereference(ht->size);
_cds_lfht_add(ht, NULL, NULL, size, node, NULL, 0);
ht_count_add(ht, size, hash);
size = rcu_dereference(ht->size);
_cds_lfht_add(ht, NULL, NULL, size, node, NULL, 0);
ht_count_add(ht, size, hash);
@@
-1486,7
+1486,7
@@
struct cds_lfht_node *cds_lfht_add_unique(struct cds_lfht *ht,
unsigned long size;
struct cds_lfht_iter iter;
unsigned long size;
struct cds_lfht_iter iter;
- node->reverse_hash = bit_reverse_ulong(
(unsigned long)
hash);
+ node->reverse_hash = bit_reverse_ulong(hash);
size = rcu_dereference(ht->size);
_cds_lfht_add(ht, match, key, size, node, &iter, 0);
if (iter.node == node)
size = rcu_dereference(ht->size);
_cds_lfht_add(ht, match, key, size, node, &iter, 0);
if (iter.node == node)
@@
-1503,7
+1503,7
@@
struct cds_lfht_node *cds_lfht_add_replace(struct cds_lfht *ht,
unsigned long size;
struct cds_lfht_iter iter;
unsigned long size;
struct cds_lfht_iter iter;
- node->reverse_hash = bit_reverse_ulong(
(unsigned long)
hash);
+ node->reverse_hash = bit_reverse_ulong(hash);
size = rcu_dereference(ht->size);
for (;;) {
_cds_lfht_add(ht, match, key, size, node, &iter, 0);
size = rcu_dereference(ht->size);
for (;;) {
_cds_lfht_add(ht, match, key, size, node, &iter, 0);
@@
-1517,11
+1517,22
@@
struct cds_lfht_node *cds_lfht_add_replace(struct cds_lfht *ht,
}
}
}
}
-int cds_lfht_replace(struct cds_lfht *ht, struct cds_lfht_iter *old_iter,
+int cds_lfht_replace(struct cds_lfht *ht,
+ struct cds_lfht_iter *old_iter,
+ unsigned long hash,
+ cds_lfht_match_fct match,
+ const void *key,
struct cds_lfht_node *new_node)
{
unsigned long size;
struct cds_lfht_node *new_node)
{
unsigned long size;
+ new_node->reverse_hash = bit_reverse_ulong(hash);
+ if (!old_iter->node)
+ return -ENOENT;
+ if (caa_unlikely(old_iter->node->reverse_hash != new_node->reverse_hash))
+ return -EINVAL;
+ if (caa_unlikely(!match(old_iter->node, key)))
+ return -EINVAL;
size = rcu_dereference(ht->size);
return _cds_lfht_replace(ht, size, old_iter->node, old_iter->next,
new_node);
size = rcu_dereference(ht->size);
return _cds_lfht_replace(ht, size, old_iter->node, old_iter->next,
new_node);
This page took
0.022891 seconds
and
4
git commands to generate.