Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
iter = rcu_dereference(iter_prev->p.next);
assert(iter_prev->p.reverse_hash <= node->p.reverse_hash);
for (;;) {
iter = rcu_dereference(iter_prev->p.next);
assert(iter_prev->p.reverse_hash <= node->p.reverse_hash);
for (;;) {
+ if (unlikely(!clear_flag(iter)))
return;
if (clear_flag(iter)->p.reverse_hash > node->p.reverse_hash)
return;
return;
if (clear_flag(iter)->p.reverse_hash > node->p.reverse_hash)
return;
iter = rcu_dereference(iter_prev->p.next);
assert(iter_prev->p.reverse_hash <= node->p.reverse_hash);
for (;;) {
iter = rcu_dereference(iter_prev->p.next);
assert(iter_prev->p.reverse_hash <= node->p.reverse_hash);
for (;;) {
+ if (unlikely(!clear_flag(iter)))
goto insert;
if (clear_flag(iter)->p.reverse_hash > node->p.reverse_hash)
goto insert;
goto insert;
if (clear_flag(iter)->p.reverse_hash > node->p.reverse_hash)
goto insert;
return -EPERM;
node = node->p.next;
assert(!is_removed(node));
return -EPERM;
node = node->p.next;
assert(!is_removed(node));
+ } while (clear_flag(node));
/* Internal sanity check: all nodes left should be dummy */
for (i = 0; i < t->size; i++) {
assert(t->tbl[i]->p.dummy);
/* Internal sanity check: all nodes left should be dummy */
for (i = 0; i < t->size; i++) {
assert(t->tbl[i]->p.dummy);