Commit 7b4ce235 authored by Herbert Xu's avatar Herbert Xu Committed by David S. Miller

rhashtable: Add parent argument to mutex_is_held

Currently mutex_is_held can only test locks in the that are global
since it takes no arguments.  This prevents rhashtable from being
used in places where locks are lock, e.g., per-namespace locks.

This patch adds a parent field to mutex_is_held and rhashtable_params
so that local locks can be used (and tested).
Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 1b2f309d
...@@ -66,7 +66,8 @@ struct rhashtable_params { ...@@ -66,7 +66,8 @@ struct rhashtable_params {
bool (*shrink_decision)(const struct rhashtable *ht, bool (*shrink_decision)(const struct rhashtable *ht,
size_t new_size); size_t new_size);
#ifdef CONFIG_PROVE_LOCKING #ifdef CONFIG_PROVE_LOCKING
int (*mutex_is_held)(void); int (*mutex_is_held)(void *parent);
void *parent;
#endif #endif
}; };
......
...@@ -32,7 +32,7 @@ ...@@ -32,7 +32,7 @@
#ifdef CONFIG_PROVE_LOCKING #ifdef CONFIG_PROVE_LOCKING
int lockdep_rht_mutex_is_held(const struct rhashtable *ht) int lockdep_rht_mutex_is_held(const struct rhashtable *ht)
{ {
return ht->p.mutex_is_held(); return ht->p.mutex_is_held(ht->p.parent);
} }
EXPORT_SYMBOL_GPL(lockdep_rht_mutex_is_held); EXPORT_SYMBOL_GPL(lockdep_rht_mutex_is_held);
#endif #endif
...@@ -618,7 +618,7 @@ EXPORT_SYMBOL_GPL(rhashtable_destroy); ...@@ -618,7 +618,7 @@ EXPORT_SYMBOL_GPL(rhashtable_destroy);
#define TEST_NEXPANDS 4 #define TEST_NEXPANDS 4
#ifdef CONFIG_PROVE_LOCKING #ifdef CONFIG_PROVE_LOCKING
static int test_mutex_is_held(void) static int test_mutex_is_held(void *parent)
{ {
return 1; return 1;
} }
......
...@@ -154,7 +154,7 @@ static unsigned int nft_hash_privsize(const struct nlattr * const nla[]) ...@@ -154,7 +154,7 @@ static unsigned int nft_hash_privsize(const struct nlattr * const nla[])
} }
#ifdef CONFIG_PROVE_LOCKING #ifdef CONFIG_PROVE_LOCKING
static int lockdep_nfnl_lock_is_held(void) static int lockdep_nfnl_lock_is_held(void *parent)
{ {
return lockdep_nfnl_is_held(NFNL_SUBSYS_NFTABLES); return lockdep_nfnl_is_held(NFNL_SUBSYS_NFTABLES);
} }
......
...@@ -115,7 +115,7 @@ DEFINE_MUTEX(nl_sk_hash_lock); ...@@ -115,7 +115,7 @@ DEFINE_MUTEX(nl_sk_hash_lock);
EXPORT_SYMBOL_GPL(nl_sk_hash_lock); EXPORT_SYMBOL_GPL(nl_sk_hash_lock);
#ifdef CONFIG_PROVE_LOCKING #ifdef CONFIG_PROVE_LOCKING
static int lockdep_nl_sk_hash_is_held(void) static int lockdep_nl_sk_hash_is_held(void *parent)
{ {
if (debug_locks) if (debug_locks)
return lockdep_is_held(&nl_sk_hash_lock) || lockdep_is_held(&nl_table_lock); return lockdep_is_held(&nl_sk_hash_lock) || lockdep_is_held(&nl_table_lock);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment