rhashtable: Add annotation to nested lock
authorHerbert Xu <herbert@gondor.apana.org.au>
Thu, 12 Mar 2015 03:47:13 +0000 (14:47 +1100)
committerDavid S. Miller <davem@davemloft.net>
Thu, 12 Mar 2015 03:53:40 +0000 (23:53 -0400)
Commit aa34a6cb0478842452bac58edb50d3ef9e178c92 ("rhashtable:
Add arbitrary rehash function") killed the annotation on the
nested lock which leads to bitching from lockdep.

Reported-by: Fengguang Wu <fengguang.wu@intel.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: David S. Miller <davem@davemloft.net>
lib/rhashtable.c

index b1c19c5..d7f3db5 100644 (file)
@@ -234,7 +234,7 @@ static int rhashtable_rehash_one(struct rhashtable *ht, unsigned old_hash)
 
        new_bucket_lock = bucket_lock(new_tbl, new_hash);
 
-       spin_lock(new_bucket_lock);
+       spin_lock_nested(new_bucket_lock, RHT_LOCK_NESTED);
        head = rht_dereference_bucket(new_tbl->buckets[new_hash],
                                      new_tbl, new_hash);
 
@@ -415,7 +415,7 @@ static bool __rhashtable_insert(struct rhashtable *ht, struct rhash_head *obj,
        tbl = rht_dereference_rcu(ht->future_tbl, ht);
        if (tbl != old_tbl) {
                hash = obj_raw_hashfn(ht, tbl, rht_obj(ht, obj));
-               spin_lock(bucket_lock(tbl, hash));
+               spin_lock_nested(bucket_lock(tbl, hash), RHT_LOCK_NESTED);
        }
 
        if (compare &&