From mboxrd@z Thu Jan 1 00:00:00 1970 From: guijianfeng@cn.fujitsu.com (Gui Jianfeng) Date: Fri, 09 Jan 2009 17:48:18 +0800 Subject: [ltt-dev] [PATCH] lttng: Fix list-break bug Message-ID: <49671D62.6080903@cn.fujitsu.com> Hi Mathieu When removing ltt-tracer module, OOPS happens. Because "tmp = ltt_traces.head;" breaks the list. This patch fix it. Signed-off-by: Gui Jianfeng --- ltt/ltt-tracer.c | 6 +----- 1 files changed, 1 insertions(+), 5 deletions(-) diff --git a/ltt/ltt-tracer.c b/ltt/ltt-tracer.c index af14135..ceb0c04 100644 --- a/ltt/ltt-tracer.c +++ b/ltt/ltt-tracer.c @@ -1159,20 +1159,16 @@ static void __exit ltt_exit(void) { struct ltt_trace_struct *trace; struct list_head *pos, *n; - struct list_head tmp; ltt_lock_traces(); /* Stop each trace, currently being read by RCU read-side */ list_for_each_entry_rcu(trace, <t_traces.head, list) _ltt_trace_stop(trace); - tmp = ltt_traces.head; - /* empty the original list head */ - INIT_LIST_HEAD(<t_traces.head); /* Wait for quiescent state. Readers have preemption disabled. */ synchronize_sched(); /* Safe iteration is now permitted. It does not have to be RCU-safe * because no readers are left. */ - list_for_each_safe(pos, n, &tmp) { + list_for_each_safe(pos, n, <t_traces.head) { trace = container_of(pos, struct ltt_trace_struct, list); /* _ltt_trace_destroy does a synchronize_sched() */ _ltt_trace_destroy(trace); -- 1.5.4.rc3 -- Regards Gui Jianfeng