lib, fs, cgroup: WARNING in percpu_ref_kill_and_confirm

From: Dmitry Vyukov
Date: Thu Mar 23 2017 - 10:05:01 EST


Hello,

The following program triggers WARNING in percpu_ref_kill_and_confirm:
https://gist.githubusercontent.com/dvyukov/bcfcef3d6b24b9fd841b88ee20c14d4b/raw/a54aeeb09ad1e0659b0ed87ef5efc4480ab2536f/gistfile1.txt

------------[ cut here ]------------
WARNING: CPU: 3 PID: 19987 at lib/percpu-refcount.c:317
percpu_ref_kill_and_confirm+0x303/0x3c0 lib/percpu-refcount.c:316
percpu_ref_kill_and_confirm called more than once on css_release!
CPU: 3 PID: 19987 Comm: a.out Not tainted 4.11.0-rc3+ #365
Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS Bochs 01/01/2011
Call Trace:
__dump_stack lib/dump_stack.c:16 [inline]
dump_stack+0x1b8/0x28d lib/dump_stack.c:52
panic+0x20c/0x423 kernel/panic.c:180
__warn+0x1c4/0x1e0 kernel/panic.c:541
warn_slowpath_fmt+0xc1/0x100 kernel/panic.c:564
percpu_ref_kill_and_confirm+0x303/0x3c0 lib/percpu-refcount.c:316
percpu_ref_kill include/linux/percpu-refcount.h:119 [inline]
cgroup_kill_sb+0x31d/0x480 kernel/cgroup/cgroup.c:1834
deactivate_locked_super+0x99/0xe0 fs/super.c:309
deactivate_super+0x151/0x160 fs/super.c:340
cleanup_mnt+0xb2/0x160 fs/namespace.c:1115
__cleanup_mnt+0x16/0x20 fs/namespace.c:1122
task_work_run+0x1a4/0x270 kernel/task_work.c:116
tracehook_notify_resume include/linux/tracehook.h:191 [inline]
exit_to_usermode_loop+0x24d/0x2d0 arch/x86/entry/common.c:161
prepare_exit_to_usermode arch/x86/entry/common.c:191 [inline]
syscall_return_slowpath+0x3bd/0x460 arch/x86/entry/common.c:260
entry_SYSCALL_64_fastpath+0xc0/0xc2
RIP: 0033:0x443129
RSP: 002b:00007ffe06080018 EFLAGS: 00000202 ORIG_RAX: 00000000000000a5
RAX: ffffffffffffffec RBX: 00000000004002b0 RCX: 0000000000443129
RDX: 000000002019cff9 RSI: 000000002000c000 RDI: 00000000204ff000
RBP: 00007ffe06080060 R08: 00000000201db000 R09: 0000000000000000
R10: 000000000000c084 R11: 0000000000000202 R12: 0000000000000000
R13: 00000000004025b0 R14: 0000000000402640 R15: 0000000000000000

On commit 093b995e3b55a0ae0670226ddfcb05bfbf0099ae