On Tuesday, May 08, 2012 03:35:07 Matthias Schiffer wrote:
It should be possible to get rid of the vis_hash_lock altogether, as the hash table has spinlocks for the hash lists itself;
Yes, the hash implementation was converted to use fine-grained locking instead of one big spinlock as was the rest of the code except for vis.
overall hash consistency might be a issue though - I would propose adding a hash_update function that updates a hash entry without deleting and re-adding the hlist node.
Can you give an example of such an "update" ? Where would we need it ?
I think I found a bug in the hash_add function though. First there is a RCU-locked loop that checks if a entry does already exist, but the spinlock is taken after the rcu_read_unlock() - thus allowing the same entry to be appended twice if two threads try to add it at the same time.
You are right - you found a bug. :)
Regards, Marek