rculfhash: avoid unneed garbage collect
authorLai Jiangshan <laijs@cn.fujitsu.com>
Mon, 17 Oct 2011 14:10:27 +0000 (10:10 -0400)
committerMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Mon, 17 Oct 2011 14:10:27 +0000 (10:10 -0400)
commit960c9e4ff8e6028f5a0d4b1c1d747b20f08c5177
tree8b108971c4e5392b8bc05d74eff4f4c8b731fea1
parentf4a9cc0b4bc9791e18c66b00023ae4ef76befb74
rculfhash: avoid unneed garbage collect

[ Edit by Mathieu Desnoyers:

If we have a concurrent removal executing while the add is performed,
I just want to ensure we agree that this scenario will be correct:

1) removal succeeds. We have flagged
   a node as "logically removed", but
   it is still in the linked list.

2) garbage collection is initiated.

                                        3) add succeeds. We insert a
                                           node with reverse hash value
                                           higher than the logically
                                           removed node. This means the
                                           add takes care of garbage
                                           collecting the logically
                                           removed node prior to adding
                                           the new node.

4) garbage collection of logically
   removed node fails
   (we ignore the return value of
    (void) uatomic_cmpxchg(&iter_prev->p.next, iter, new_next);)
   retry and iterate until we find the reverse
   hash value higher than the logically
   remove node.

So I think this is OK: given that the add path takes care of garbage
collecting any logically removed node located prior to the insert
position, we don't need to perform gargage collection after the
insertion. ]

Signed-off-by: Lai Jiangshan <laijs@cn.fujitsu.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
rculfhash.c
This page took 0.025419 seconds and 4 git commands to generate.