commit
5634cc2aa9aebc77bc862992e7805469dcf83dac ("writeback: update writeback
tracepoints to report cgroup") made writeback tracepoints print out cgroup
path when CGROUP_WRITEBACK is enabled, but it may trigger the below bug on -rt
kernel since kernfs_path and kernfs_path_len are called by tracepoints, which
acquire spin lock that is sleepable on -rt kernel.
BUG: sleeping function called from invalid context at kernel/locking/rtmutex.c:930
in_atomic(): 1, irqs_disabled(): 0, pid: 625, name: kworker/u16:3
INFO: lockdep is turned off.
Preemption disabled at:[<
ffffffc000374a5c>] wb_writeback+0xec/0x830
CPU: 7 PID: 625 Comm: kworker/u16:3 Not tainted 4.4.1-rt5 #20
Hardware name: Freescale Layerscape 2085a RDB Board (DT)
Workqueue: writeback wb_workfn (flush-7:0)
Call trace:
[<
ffffffc00008d708>] dump_backtrace+0x0/0x200
[<
ffffffc00008d92c>] show_stack+0x24/0x30
[<
ffffffc0007b0f40>] dump_stack+0x88/0xa8
[<
ffffffc000127d74>] ___might_sleep+0x2ec/0x300
[<
ffffffc000d5d550>] rt_spin_lock+0x38/0xb8
[<
ffffffc0003e0548>] kernfs_path_len+0x30/0x90
[<
ffffffc00036b360>] trace_event_raw_event_writeback_work_class+0xe8/0x2e8
[<
ffffffc000374f90>] wb_writeback+0x620/0x830
[<
ffffffc000376224>] wb_workfn+0x61c/0x950
[<
ffffffc000110adc>] process_one_work+0x3ac/0xb30
[<
ffffffc0001112fc>] worker_thread+0x9c/0x7a8
[<
ffffffc00011a9e8>] kthread+0x190/0x1b0
[<
ffffffc000086ca0>] ret_from_fork+0x10/0x30
With unlocked kernfs_* functions, synchronize_sched() has to be called in
kernfs_rename which could be called in syscall path, but it is problematic.
So, print out cgroup ino instead of path name, which could be converted to
path name by userland.
Withouth CGROUP_WRITEBACK enabled, it just prints out root dir. But, root
dir ino vary from different filesystems, so printing out -1U to indicate
an invalid cgroup ino.
Link: http://lkml.kernel.org/r/1456996137-8354-1-git-send-email-yang.shi@linaro.org
Acked-by: Tejun Heo <tj@kernel.org>
Signed-off-by: Yang Shi <yang.shi@linaro.org>
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>