- iter_prev = rcu_dereference(t->tbl[node->hash & (t->size - 1)]);
- /* We can always skip the dummy node initially */
- iter_prev_next = next = rcu_dereference(iter_prev->next);
- assert(iter_prev);
- assert(iter_prev->reverse_hash <= node->reverse_hash);
- for (;;) {
- iter = next;
- if (unlikely(!clear_flag(iter)))
- break;
- next = rcu_dereference(clear_flag(iter)->next);
- if (clear_flag(iter) == node) {
- found = 1;
- assert(is_removed(rcu_dereference(node->next)));
- break;
- }
- if (unlikely(is_removed(next)))
- continue;
- if (clear_flag(iter)->reverse_hash > node->reverse_hash)
- break;
- iter_prev = clear_flag(iter);
- iter_prev_next = next;
- }
- if (!found)
- goto end;
- if (uatomic_cmpxchg(&iter_prev->next, iter_prev_next,
- clear_flag(next)) != iter_prev_next)
- goto retry;
+ dummy = rcu_dereference(t->tbl[node->hash & (t->size - 1)]);
+ _ht_gc_bucket(dummy, node);