From 591a18db7f56cc48c867594fb5981bbb6b008a9e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?T=C3=B6r=C3=B6k=20Edwin?= Date: Sun, 23 Nov 2008 12:39:07 +0200 Subject: [PATCH] --- yaml --- r: 121189 b: refs/heads/master c: cffa10aecb6891f090a4d53a075bc40c082c45fc h: refs/heads/master i: 121187: ab5236783b630aedb74aed63b63eee2581471417 v: v3 --- [refs] | 2 +- trunk/kernel/trace/trace.c | 9 ++++++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/[refs] b/[refs] index 0c082d2fc133..8d315b84abb1 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 8d7c6a96164651dbbab449ef0b5c20ae1f76a3a1 +refs/heads/master: cffa10aecb6891f090a4d53a075bc40c082c45fc diff --git a/trunk/kernel/trace/trace.c b/trunk/kernel/trace/trace.c index dedf35f36971..4c3bd82cec49 100644 --- a/trunk/kernel/trace/trace.c +++ b/trunk/kernel/trace/trace.c @@ -1462,11 +1462,15 @@ static inline int seq_print_user_ip(struct trace_seq *s, struct mm_struct *mm, int ret = 1; if (mm) { - const struct vm_area_struct *vma = find_vma(mm, ip); + const struct vm_area_struct *vma; + + down_read(&mm->mmap_sem); + vma = find_vma(mm, ip); if (vma) { file = vma->vm_file; vmstart = vma->vm_start; } + up_read(&mm->mmap_sem); } if (file) { ret = trace_seq_path(s, &file->f_path); @@ -1494,10 +1498,9 @@ seq_print_userip_objs(const struct userstack_entry *entry, struct trace_seq *s, */ rcu_read_lock(); task = find_task_by_vpid(entry->ent.tgid); - rcu_read_unlock(); - if (task) mm = get_task_mm(task); + rcu_read_unlock(); } for (i = 0; i < FTRACE_STACK_ENTRIES; i++) {