diff options
author | Tejun Heo <tj@kernel.org> | 2014-09-20 01:27:24 -0400 |
---|---|---|
committer | Tejun Heo <tj@kernel.org> | 2014-09-20 01:27:24 -0400 |
commit | 4843c3320c3d23ab4ecf520f5eaf485aff8c7252 (patch) | |
tree | 959c13745e8f4372ec5d0558a27af53ef9104758 | |
parent | 23cb8981ed929b4dd48141401cd0fd31e0fa4ed0 (diff) | |
download | blackbird-op-linux-4843c3320c3d23ab4ecf520f5eaf485aff8c7252.tar.gz blackbird-op-linux-4843c3320c3d23ab4ecf520f5eaf485aff8c7252.zip |
percpu-refcount: improve WARN messages
percpu_ref's WARN messages can be a lot more helpful by indicating
who's the culprit. Make them report the release function that the
offending percpu-refcount is associated with. This should make it a
lot easier to track down the reported invalid refcnting operations.
Signed-off-by: Tejun Heo <tj@kernel.org>
Cc: Kent Overstreet <kmo@daterainc.com>
-rw-r--r-- | lib/percpu-refcount.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/lib/percpu-refcount.c b/lib/percpu-refcount.c index ff9903264a91..70d28c91f35a 100644 --- a/lib/percpu-refcount.c +++ b/lib/percpu-refcount.c @@ -145,8 +145,9 @@ static void percpu_ref_kill_rcu(struct rcu_head *rcu) atomic_add((int) count - PCPU_COUNT_BIAS, &ref->count); - WARN_ONCE(atomic_read(&ref->count) <= 0, "percpu ref <= 0 (%i)", - atomic_read(&ref->count)); + WARN_ONCE(atomic_read(&ref->count) <= 0, + "percpu ref (%pf) <= 0 (%i) after killed", + ref->release, atomic_read(&ref->count)); /* @ref is viewed as dead on all CPUs, send out kill confirmation */ if (ref->confirm_kill) @@ -178,7 +179,8 @@ void percpu_ref_kill_and_confirm(struct percpu_ref *ref, percpu_ref_func_t *confirm_kill) { WARN_ONCE(ref->pcpu_count_ptr & PCPU_REF_DEAD, - "percpu_ref_kill() called more than once!\n"); + "percpu_ref_kill() called more than once on %pf!", + ref->release); ref->pcpu_count_ptr |= PCPU_REF_DEAD; ref->confirm_kill = confirm_kill; |