diff options
author | john stultz <johnstul@us.ibm.com> | 2009-12-14 21:00:05 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2009-12-15 11:53:24 -0500 |
commit | 4614a696bd1c3a9af3a08f0e5874830a85b889d4 (patch) | |
tree | 0b363d89ce612ab8557d49ab8b0f49b8520ffa66 /fs/exec.c | |
parent | 7e1e0ef22c9ba9f797d7c4448feee722584bba5c (diff) |
procfs: allow threads to rename siblings via /proc/pid/tasks/tid/comm
Setting a thread's comm to be something unique is a very useful ability
and is helpful for debugging complicated threaded applications. However
currently the only way to set a thread name is for the thread to name
itself via the PR_SET_NAME prctl.
However, there may be situations where it would be advantageous for a
thread dispatcher to be naming the threads its managing, rather then
having the threads self-describe themselves. This sort of behavior is
available on other systems via the pthread_setname_np() interface.
This patch exports a task's comm via proc/pid/comm and
proc/pid/task/tid/comm interfaces, and allows thread siblings to write to
these values.
[akpm@linux-foundation.org: cleanups]
Signed-off-by: John Stultz <johnstul@us.ibm.com>
Cc: Andi Kleen <andi@firstfloor.org>
Cc: Arjan van de Ven <arjan@infradead.org>
Cc: Mike Fulton <fultonm@ca.ibm.com>
Cc: Sean Foley <Sean_Foley@ca.ibm.com>
Cc: Darren Hart <dvhltc@us.ibm.com>
Cc: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'fs/exec.c')
-rw-r--r-- | fs/exec.c | 9 |
1 files changed, 9 insertions, 0 deletions
@@ -923,6 +923,15 @@ char *get_task_comm(char *buf, struct task_struct *tsk) | |||
923 | void set_task_comm(struct task_struct *tsk, char *buf) | 923 | void set_task_comm(struct task_struct *tsk, char *buf) |
924 | { | 924 | { |
925 | task_lock(tsk); | 925 | task_lock(tsk); |
926 | |||
927 | /* | ||
928 | * Threads may access current->comm without holding | ||
929 | * the task lock, so write the string carefully. | ||
930 | * Readers without a lock may see incomplete new | ||
931 | * names but are safe from non-terminating string reads. | ||
932 | */ | ||
933 | memset(tsk->comm, 0, TASK_COMM_LEN); | ||
934 | wmb(); | ||
926 | strlcpy(tsk->comm, buf, sizeof(tsk->comm)); | 935 | strlcpy(tsk->comm, buf, sizeof(tsk->comm)); |
927 | task_unlock(tsk); | 936 | task_unlock(tsk); |
928 | perf_event_comm(tsk); | 937 | perf_event_comm(tsk); |