diff --git a/kernel/sched/core.c b/kernel/sched/core.c index bdec84524e71..97347dfb8224 100755 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c @@ -4941,7 +4941,6 @@ static inline bool is_sched_lib_based_app(pid_t pid) char path_buf[LIB_PATH_LENGTH]; bool found = false; struct task_struct *p; - struct mm_struct *mm; if (strnlen(sched_lib_name, LIB_PATH_LENGTH) == 0) return false; @@ -4958,12 +4957,11 @@ static inline bool is_sched_lib_based_app(pid_t pid) get_task_struct(p); rcu_read_unlock(); - mm = get_task_mm(p); - if (!mm) + if (!p->mm) goto put_task_struct; - down_read(&mm->mmap_sem); - for (vma = mm->mmap; vma ; vma = vma->vm_next) { + down_read(&p->mm->mmap_sem); + for (vma = p->mm->mmap; vma ; vma = vma->vm_next) { if (vma->vm_file && vma->vm_flags & VM_EXEC) { name = d_path(&vma->vm_file->f_path, path_buf, LIB_PATH_LENGTH); @@ -4979,8 +4977,7 @@ static inline bool is_sched_lib_based_app(pid_t pid) } release_sem: - up_read(&mm->mmap_sem); - mmput(mm); + up_read(&p->mm->mmap_sem); put_task_struct: put_task_struct(p); return found;