Re: xfrm_state locking regression...
From: Timo Teräs <hidden>
Date: 2008-09-23 12:25:48
Herbert Xu wrote:
On Tue, Sep 23, 2008 at 03:08:08PM +0300, Timo Teräs wrote:quoted
+ list_for_each_entry(walk, &xfrm_state_walks, list) { + if (walk->state == x) + walk->state = next; + }Just make a new list in xfrm_state that has all the dumpers sitting on it. In fact all you need is a hlist, or even just a pointer.
There can be a lot of xfrm_state structs. As in thousands. So it will take more memory then. hlist would be enough, so it'd be a 4/8 bytes addition. Single pointer would not be enough as we can have multiple walks on the same entry.
Walking through an unbounded list on the fast path is not good :)
I was thinking about the same. That's why I wasn't so sure if this is better. In practice there aren't many walks active. Maybe we limit the maximum simultaneous walks? But in real life, there is only a one or two walkers if any active. So I would not consider a global update too expensive. But if you think it might become a problem, I'd add an hlist to xfrm_state of walkers referencing that entry. - Timo