| From 1705f8074c75217f5810f7deb4518c39591b373c Mon Sep 17 00:00:00 2001 |
| From: Thomas Gleixner <tglx@linutronix.de> |
| Date: Sun, 28 Feb 2016 15:14:43 +0100 |
| Subject: [PATCH 303/351] trace/writeback: Block cgroup path tracing on RT |
| X-NVConfidentiality: public |
| |
| Yang reported that with CGROUP_WRITEBACK enabled the tracer triggers the |
| following backtrace: |
| |
| 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 |
| |
| Yang proposed to provide an unlocked function for accessing the cgroup path, |
| but that'd involve synchronize_sched() in a syscall, which is not desired |
| either. There was some discussion about using the inode number or the cgroup |
| id, but so far we have no working solution. |
| |
| Disable the CGROUP_WRITEBACK path tracing for now when RT is enabled. |
| |
| Reported-by: Yang Shi <yang.shi@linaro.org> |
| Link: http://lkml.kernel.org/r/1456528481-15936-1-git-send-email-yang.shi@linaro.org |
| Signed-off-by: Thomas Gleixner <tglx@linutronix.de> |
| --- |
| include/trace/events/writeback.h | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| diff --git a/include/trace/events/writeback.h b/include/trace/events/writeback.h |
| index fff846b512e6..253ef2833c46 100644 |
| --- a/include/trace/events/writeback.h |
| +++ b/include/trace/events/writeback.h |
| @@ -132,7 +132,7 @@ DEFINE_EVENT(writeback_dirty_inode_template, writeback_dirty_inode, |
| ); |
| |
| #ifdef CREATE_TRACE_POINTS |
| -#ifdef CONFIG_CGROUP_WRITEBACK |
| +#if defined(CONFIG_CGROUP_WRITEBACK) && !defined(CONFIG_PREEMPT_RT_FULL) |
| |
| static inline size_t __trace_wb_cgroup_size(struct bdi_writeback *wb) |
| { |
| -- |
| 2.10.1 |
| |