#define max(a, b) ((a) > (b) ? (a) : (b))
#endif
+/*
+ * The removed flag needs to be updated atomically with the pointer.
+ * The dummy flag does not require to be updated atomically with the
+ * pointer, but it is added as a pointer low bit flag to save space.
+ */
#define REMOVED_FLAG (1UL << 0)
#define DUMMY_FLAG (1UL << 1)
#define FLAGS_MASK ((1UL << 2) - 1)
next = rcu_dereference(clear_flag(iter)->p.next);
if (is_removed(next))
break;
- iter_prev = iter;
+ iter_prev = clear_flag(iter);
iter = next;
}
assert(!is_removed(iter));