aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOleg Nesterov <oleg@redhat.com>2009-06-17 19:27:34 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2009-06-18 16:03:51 -0400
commit8053bdd5ce15dcf043d41a4dd6cac4a5567effdc (patch)
treeb139a0763d46143fbe5e36811b03c1987ef23b7a
parent4b105cbbaf7c06e01c27391957dc3c446328d087 (diff)
ptrace_get_task_struct: s/tasklist/rcu/, make it static
- Use rcu_read_lock() instead of tasklist_lock to find/get the task in ptrace_get_task_struct(). - Make it static, it has no callers outside of ptrace.c. - The comment doesn't match the reality, this helper does not do any checks. Beacuse it is really trivial and static I removed the whole comment. Signed-off-by: Oleg Nesterov <oleg@redhat.com> Acked-by: Roland McGrath <roland@redhat.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-rw-r--r--include/linux/ptrace.h1
-rw-r--r--kernel/ptrace.c16
2 files changed, 3 insertions, 14 deletions
diff --git a/include/linux/ptrace.h b/include/linux/ptrace.h
index 59e133d39d50..7456d7d87a19 100644
--- a/include/linux/ptrace.h
+++ b/include/linux/ptrace.h
@@ -81,7 +81,6 @@
81 81
82 82
83extern long arch_ptrace(struct task_struct *child, long request, long addr, long data); 83extern long arch_ptrace(struct task_struct *child, long request, long addr, long data);
84extern struct task_struct *ptrace_get_task_struct(pid_t pid);
85extern int ptrace_traceme(void); 84extern int ptrace_traceme(void);
86extern int ptrace_readdata(struct task_struct *tsk, unsigned long src, char __user *dst, int len); 85extern int ptrace_readdata(struct task_struct *tsk, unsigned long src, char __user *dst, int len);
87extern int ptrace_writedata(struct task_struct *tsk, char __user *src, unsigned long dst, int len); 86extern int ptrace_writedata(struct task_struct *tsk, char __user *src, unsigned long dst, int len);
diff --git a/kernel/ptrace.c b/kernel/ptrace.c
index 38fdfea1a15a..a64fe75a48ba 100644
--- a/kernel/ptrace.c
+++ b/kernel/ptrace.c
@@ -581,26 +581,16 @@ int ptrace_request(struct task_struct *child, long request,
581 return ret; 581 return ret;
582} 582}
583 583
584/** 584static struct task_struct *ptrace_get_task_struct(pid_t pid)
585 * ptrace_get_task_struct -- grab a task struct reference for ptrace
586 * @pid: process id to grab a task_struct reference of
587 *
588 * This function is a helper for ptrace implementations. It checks
589 * permissions and then grabs a task struct for use of the actual
590 * ptrace implementation.
591 *
592 * Returns the task_struct for @pid or an ERR_PTR() on failure.
593 */
594struct task_struct *ptrace_get_task_struct(pid_t pid)
595{ 585{
596 struct task_struct *child; 586 struct task_struct *child;
597 587
598 read_lock(&tasklist_lock); 588 rcu_read_lock();
599 child = find_task_by_vpid(pid); 589 child = find_task_by_vpid(pid);
600 if (child) 590 if (child)
601 get_task_struct(child); 591 get_task_struct(child);
592 rcu_read_unlock();
602 593
603 read_unlock(&tasklist_lock);
604 if (!child) 594 if (!child)
605 return ERR_PTR(-ESRCH); 595 return ERR_PTR(-ESRCH);
606 return child; 596 return child;