• Tejun Heo's avatar
    percpu_counter: add debugobj support · e2852ae8
    Tejun Heo authored
    All percpu counters are linked to a global list on initialization and
    removed from it on destruction.  The list is walked during CPU up/down.
    If a percpu counter is freed without being properly destroyed, the system
    will oops only on the next CPU up/down making it pretty nasty to track
    down.  This patch adds debugobj support for percpu counters so that such
    problems can be found easily.
    
    As percpu counters don't make sense on stack and can't be statically
    initialized, debugobj support is pretty simple.  It's initialized and
    activated on counter initialization, and deactivatd and destroyed on
    counter destruction.  With this patch applied, the bug fixed by commit
    602586a8 (shmem: put_super must
    percpu_counter_destroy) triggers the following warning on tmpfs unmount
    and the system won't oops on the next cpu up/down operation.
    
     ------------[ cut here ]------------
     WARNING: at lib/debugobjects.c:259 debug_print_object+0x5c/0x70()
     Hardware name: Bochs
     ODEBUG: free active (active state 0) object type: percpu_counter
     Modules linked in:
     Pid: 3999, comm: umount Not tainted 2.6.36-rc2-work+ #5
     Call Trace:
      [<ffffffff81083f7f>] warn_slowpath_common+0x7f/0xc0
      [<ffffffff81084076>] warn_slowpath_fmt+0x46/0x50
      [<ffffffff813b45cc>] debug_print_object+0x5c/0x70
      [<ffffffff813b50e5>] debug_check_no_obj_freed+0x125/0x210
      [<ffffffff811577d3>] kfree+0xb3/0x2f0
      [<ffffffff81132edd>] shmem_put_super+0x1d/0x30
      [<ffffffff81162e96>] generic_shutdown_super+0x56/0xe0
      [<ffffffff81162f86>] kill_anon_super+0x16/0x60
      [<ffffffff81162ff7>] kill_litter_super+0x27/0x30
      [<ffffffff81163295>] deactivate_locked_super+0x45/0x60
      [<ffffffff81163cfa>] deactivate_super+0x4a/0x70
      [<ffffffff8117d446>] mntput_no_expire+0x86/0xe0
      [<ffffffff8117df7f>] sys_umount+0x6f/0x360
      [<ffffffff8103f01b>] system_call_fastpath+0x16/0x1b
     ---[ end trace cce2a341ba3611a7 ]---
    Signed-off-by: default avatarTejun Heo <tj@kernel.org>
    Acked-by: Thomas Gleixner <tglxlinutronix.de>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    e2852ae8
percpu_counter.c 5.03 KB