]> git.baikalelectronics.ru Git - kernel.git/commit
rhashtable: Allow hash/comparison functions to be inlined
authorHerbert Xu <herbert@gondor.apana.org.au>
Fri, 20 Mar 2015 10:57:00 +0000 (21:57 +1100)
committerDavid S. Miller <davem@davemloft.net>
Fri, 20 Mar 2015 20:16:24 +0000 (16:16 -0400)
commit107479fc89862c24d9be8945f5b8cd955785de08
tree5bce8d1e7f57aefa89073934042d2907408fd403
parentf537a87312dc3b0c2f5e90d6e6de4853adbe2d53
rhashtable: Allow hash/comparison functions to be inlined

This patch deals with the complaint that we make indirect function
calls on the fast paths unnecessarily in rhashtable.  We resolve
it by moving the fast paths into inline functions that take struct
rhashtable_param (which obviously must be the same set of parameters
supplied to rhashtable_init) as an argument.

The only remaining indirect call is to obj_hashfn (or key_hashfn it
obj_hashfn is unset) on the rehash as well as the insert-during-
rehash slow path.

This patch also extends the support of vairable-length keys to
include those where the key is fixed but scattered in the object.
For example, in netlink we want to key off the namespace and the
portid but they're not next to each other.

This patch does this by directly using the object hash function
as the indicator of whether the key is accessible or not.  It
also adds a new function obj_cmpfn to compare a key against an
object.  This means that the caller no longer needs to supply
explicit compare functions.

All this is done in a backwards compatible manner so no existing
users are affected until they convert to the new interface.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/linux/rhashtable.h
lib/rhashtable.c