Signed-off-by: Alexey Dobriyan <adobriyan@xxxxxxxxx> --- drivers/oprofile/buffer_sync.c | 30 ++++++++---------------------- 1 files changed, 8 insertions(+), 22 deletions(-) diff --git a/drivers/oprofile/buffer_sync.c b/drivers/oprofile/buffer_sync.c index 8574622..64c6d7d 100644 --- a/drivers/oprofile/buffer_sync.c +++ b/drivers/oprofile/buffer_sync.c @@ -25,6 +25,7 @@ #include <linux/workqueue.h> #include <linux/notifier.h> #include <linux/dcookies.h> +#include <linux/path.h> #include <linux/profile.h> #include <linux/module.h> #include <linux/fs.h> @@ -213,30 +214,15 @@ static inline unsigned long fast_get_dcookie(struct path *path) return cookie; } - -/* Look up the dcookie for the task's first VM_EXECUTABLE mapping, - * which corresponds loosely to "application name". This is - * not strictly necessary but allows oprofile to associate - * shared-library samples with particular applications - */ -static unsigned long get_exec_dcookie(struct mm_struct *mm) +static unsigned long get_exec_dcookie(struct task_struct *tsk) { unsigned long cookie = NO_COOKIE; - struct vm_area_struct *vma; + struct path exec_path; - if (!mm) - goto out; - - for (vma = mm->mmap; vma; vma = vma->vm_next) { - if (!vma->vm_file) - continue; - if (!(vma->vm_flags & VM_EXECUTABLE)) - continue; - cookie = fast_get_dcookie(&vma->vm_file->f_path); - break; - } - -out: + get_task_exec_path(tsk, &exec_path); + if (exec_path.mnt && exec_path.dentry) + cookie = fast_get_dcookie(&exec_path); + path_put(&exec_path); return cookie; } @@ -543,7 +529,7 @@ void sync_buffer(int cpu) release_mm(oldmm); mm = take_tasks_mm(new); if (mm != oldmm) - cookie = get_exec_dcookie(mm); + cookie = get_exec_dcookie(new); add_user_ctx_switch(new, cookie); } if (op_cpu_buffer_get_size(&entry)) -- To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html