浏览代码

Merge branch 'tracing-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip

* 'tracing-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip:
  ftrace: do_each_pid_task() needs rcu lock
Linus Torvalds 16 年之前
父节点
当前提交
9f96ae6ee0
共有 1 个文件被更改,包括 5 次插入0 次删除
  1. 5 0
      kernel/trace/ftrace.c

+ 5 - 0
kernel/trace/ftrace.c

@@ -1737,9 +1737,12 @@ static void clear_ftrace_pid(struct pid *pid)
 {
 {
 	struct task_struct *p;
 	struct task_struct *p;
 
 
+	rcu_read_lock();
 	do_each_pid_task(pid, PIDTYPE_PID, p) {
 	do_each_pid_task(pid, PIDTYPE_PID, p) {
 		clear_tsk_trace_trace(p);
 		clear_tsk_trace_trace(p);
 	} while_each_pid_task(pid, PIDTYPE_PID, p);
 	} while_each_pid_task(pid, PIDTYPE_PID, p);
+	rcu_read_unlock();
+
 	put_pid(pid);
 	put_pid(pid);
 }
 }
 
 
@@ -1747,9 +1750,11 @@ static void set_ftrace_pid(struct pid *pid)
 {
 {
 	struct task_struct *p;
 	struct task_struct *p;
 
 
+	rcu_read_lock();
 	do_each_pid_task(pid, PIDTYPE_PID, p) {
 	do_each_pid_task(pid, PIDTYPE_PID, p) {
 		set_tsk_trace_trace(p);
 		set_tsk_trace_trace(p);
 	} while_each_pid_task(pid, PIDTYPE_PID, p);
 	} while_each_pid_task(pid, PIDTYPE_PID, p);
+	rcu_read_unlock();
 }
 }
 
 
 static void clear_ftrace_pid_task(struct pid **pid)
 static void clear_ftrace_pid_task(struct pid **pid)