lkml.org 
[lkml]   [2015]   [Jan]   [13]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
From
SubjectRE: [PATCH net-next] rhashtable: Lower/upper bucket may map to same lock while shrinking
Date
From: Thomas Graf
> Each per bucket lock covers a configurable number of buckets. While
> shrinking, two buckets in the old table contain entries for a single
> bucket in the new table. We need to lock down both while linking.
> Check if they are protected by different locks to avoid a recursive
> lock.

Thought, could the shrunk table use the same locks as the lower half
of the old table?

I also wonder whether shrinking hash tables is ever actually worth
the effort. Most likely they'll need to grow again very quickly.

> spin_lock_bh(old_bucket_lock1);
> - spin_lock_bh_nested(old_bucket_lock2, RHT_LOCK_NESTED);
> - spin_lock_bh_nested(new_bucket_lock, RHT_LOCK_NESTED2);
> +
> + /* Depending on the lock per buckets mapping, the bucket in
> + * the lower and upper region may map to the same lock.
> + */
> + if (old_bucket_lock1 != old_bucket_lock2) {
> + spin_lock_bh_nested(old_bucket_lock2, RHT_LOCK_NESTED);
> + spin_lock_bh_nested(new_bucket_lock, RHT_LOCK_NESTED2);
> + } else {
> + spin_lock_bh_nested(new_bucket_lock, RHT_LOCK_NESTED);
> + }

Acquiring 3 locks of much the same type looks like a locking hierarchy
violation just waiting to happen.

David



\
 
 \ /
  Last update: 2015-01-13 11:01    [W:0.065 / U:0.616 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site