rhashtable: Use a single bucket lock for sibling buckets
authorThomas Graf <tgraf@suug.ch>
Thu, 5 Feb 2015 01:03:32 +0000 (02:03 +0100)
committerDavid S. Miller <davem@davemloft.net>
Fri, 6 Feb 2015 23:18:34 +0000 (15:18 -0800)
commita5ec68e3b8f2c95ea1a5d23dd543abbe0c8d0624
treed9229fd3b7fd4b3321dded59e7bb4b8925e37cc9
parentc88455ce50ae4224d84960ce2baa53e61580df27
rhashtable: Use a single bucket lock for sibling buckets

rhashtable currently allows to use a bucket lock per bucket. This
requires multiple levels of complicated nested locking because when
resizing, a single bucket of the smaller table will map to two
buckets in the larger table. So far rhashtable has explicitly locked
both buckets in the larger table.

By excluding the highest bit of the hash from the bucket lock map and
thus only allowing locks to buckets in a ratio of 1:2, the locking
can be simplified a lot without losing the benefits of multiple locks.
Larger tables which benefit from multiple locks will not have a single
lock per bucket anyway.

Signed-off-by: Thomas Graf <tgraf@suug.ch>
Signed-off-by: David S. Miller <davem@davemloft.net>
lib/rhashtable.c