Re: [net-next PATCH 3/3] net: frag queue per hash bucket locking
From: David Miller <davem@davemloft.net>
Date: 2013-03-28 19:19:12
From: Hannes Frederic Sowa <redacted> Date: Thu, 28 Mar 2013 20:10:50 +0100
On Thu, Mar 28, 2013 at 03:03:59PM -0400, David Miller wrote:quoted
From: Hannes Frederic Sowa <redacted> Date: Thu, 28 Mar 2013 19:57:21 +0100quoted
On Wed, Mar 27, 2013 at 10:25:59AM -0700, Eric Dumazet wrote:quoted
On Wed, 2013-03-27 at 16:56 +0100, Jesper Dangaard Brouer wrote:quoted
This patch implements per hash bucket locking for the frag queue hash. This removes two write locks, and the only remaining write lock is for protecting hash rebuild. This essentially reduce the readers-writer lock to a rebuild lock....quoted
quoted
I am not sure why you added _bh suffix to spin_lock()/spin_unlock() here ?I assume that it has to do with the usage of this code in ipv6/netfilter/nf_conntrack_reasm.c, which could be invoked from process context, if I read it correctly.That appears to be the case yes. That's an odd environment for these routines to be invoked from, so longer term we should probably make the nf conntrack code do the BH disabling around the inet frag calls, rather than make the inet frag code eat the extra overhead for the more common invocations.My idea was a bh-safe flag in struct inet_frags and conditionally use spin_lock and spin_unlock_bh (these could be wrapped in inline functions just for inet_fragment.c).
That's an extra check eaten by all users. Really, put the overhead into the call sites that need it, and nowhere else.