Manuel Bouyer <bou...@antioche.eu.org> wrote: > > > > AFAIK syncache is not using callout_halt(). It's testing callout_invoking > > () though. > > I can't say if droping the softnet lock in syn_cache_put() (this is > > where the pool_put() really is) is safe or not. > > Can someone familiar with the TCP code have a look at this ? > I've got several panic from this bug since I wrote this mail, I've > looked at it quickly and the fix doesn't look obvious ...
There are multiple paths calling syn_cache_put() and not only SYN cache, but also upper TCP layers and IP would need to be inspected. Unlikely to be safe and unlikely to be trivial to re-structure to be safe.. there we shall start a big MP-safe network stack revamp. For a quick fix (apart from horrible hack, like having another softint or kthread), it seems that we can use SCF_DEAD with syn_cache_timer() invoked via our callout, which would destroy... itself. :) -- Mindaugas