diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2018-06-05 20:31:33 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2018-06-05 20:31:33 -0400 |
commit | af6c5d5e01ad9f2c9ca38cccaae6b5d67ddd241f (patch) | |
tree | 5bfdb1ee5c0b904732929eae55fe6da13bd273d5 /fs/proc/array.c | |
parent | 9f25a8da423226d7797e35a132535186c531228b (diff) | |
parent | 66448bc274cadedb71fda7d914e7c29d8dead217 (diff) |
Merge branch 'for-4.18' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/wq
Pull workqueue updates from Tejun Heo:
- make kworkers report the workqueue it is executing or has executed
most recently in /proc/PID/comm (so they show up in ps/top)
- CONFIG_SMP shuffle to move stuff which isn't necessary for UP builds
inside CONFIG_SMP.
* 'for-4.18' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/wq:
workqueue: move function definitions within CONFIG_SMP block
workqueue: Make sure struct worker is accessible for wq_worker_comm()
workqueue: Show the latest workqueue name in /proc/PID/{comm,stat,status}
proc: Consolidate task->comm formatting into proc_task_name()
workqueue: Set worker->desc to workqueue name by default
workqueue: Make worker_attach/detach_pool() update worker->pool
workqueue: Replace pool->attach_mutex with global wq_pool_attach_mutex
Diffstat (limited to 'fs/proc/array.c')
-rw-r--r-- | fs/proc/array.c | 33 |
1 files changed, 20 insertions, 13 deletions
diff --git a/fs/proc/array.c b/fs/proc/array.c index e6d7f41b6684..004077f1a7bf 100644 --- a/fs/proc/array.c +++ b/fs/proc/array.c | |||
@@ -96,22 +96,29 @@ | |||
96 | #include <asm/processor.h> | 96 | #include <asm/processor.h> |
97 | #include "internal.h" | 97 | #include "internal.h" |
98 | 98 | ||
99 | static inline void task_name(struct seq_file *m, struct task_struct *p) | 99 | void proc_task_name(struct seq_file *m, struct task_struct *p, bool escape) |
100 | { | 100 | { |
101 | char *buf; | 101 | char *buf; |
102 | size_t size; | 102 | size_t size; |
103 | char tcomm[sizeof(p->comm)]; | 103 | char tcomm[64]; |
104 | int ret; | 104 | int ret; |
105 | 105 | ||
106 | get_task_comm(tcomm, p); | 106 | if (p->flags & PF_WQ_WORKER) |
107 | 107 | wq_worker_comm(tcomm, sizeof(tcomm), p); | |
108 | seq_puts(m, "Name:\t"); | 108 | else |
109 | __get_task_comm(tcomm, sizeof(tcomm), p); | ||
109 | 110 | ||
110 | size = seq_get_buf(m, &buf); | 111 | size = seq_get_buf(m, &buf); |
111 | ret = string_escape_str(tcomm, buf, size, ESCAPE_SPACE | ESCAPE_SPECIAL, "\n\\"); | 112 | if (escape) { |
112 | seq_commit(m, ret < size ? ret : -1); | 113 | ret = string_escape_str(tcomm, buf, size, |
114 | ESCAPE_SPACE | ESCAPE_SPECIAL, "\n\\"); | ||
115 | if (ret >= size) | ||
116 | ret = -1; | ||
117 | } else { | ||
118 | ret = strscpy(buf, tcomm, size); | ||
119 | } | ||
113 | 120 | ||
114 | seq_putc(m, '\n'); | 121 | seq_commit(m, ret); |
115 | } | 122 | } |
116 | 123 | ||
117 | /* | 124 | /* |
@@ -390,7 +397,10 @@ int proc_pid_status(struct seq_file *m, struct pid_namespace *ns, | |||
390 | { | 397 | { |
391 | struct mm_struct *mm = get_task_mm(task); | 398 | struct mm_struct *mm = get_task_mm(task); |
392 | 399 | ||
393 | task_name(m, task); | 400 | seq_puts(m, "Name:\t"); |
401 | proc_task_name(m, task, true); | ||
402 | seq_putc(m, '\n'); | ||
403 | |||
394 | task_state(m, ns, pid, task); | 404 | task_state(m, ns, pid, task); |
395 | 405 | ||
396 | if (mm) { | 406 | if (mm) { |
@@ -425,7 +435,6 @@ static int do_task_stat(struct seq_file *m, struct pid_namespace *ns, | |||
425 | u64 cutime, cstime, utime, stime; | 435 | u64 cutime, cstime, utime, stime; |
426 | u64 cgtime, gtime; | 436 | u64 cgtime, gtime; |
427 | unsigned long rsslim = 0; | 437 | unsigned long rsslim = 0; |
428 | char tcomm[sizeof(task->comm)]; | ||
429 | unsigned long flags; | 438 | unsigned long flags; |
430 | 439 | ||
431 | state = *get_task_state(task); | 440 | state = *get_task_state(task); |
@@ -452,8 +461,6 @@ static int do_task_stat(struct seq_file *m, struct pid_namespace *ns, | |||
452 | } | 461 | } |
453 | } | 462 | } |
454 | 463 | ||
455 | get_task_comm(tcomm, task); | ||
456 | |||
457 | sigemptyset(&sigign); | 464 | sigemptyset(&sigign); |
458 | sigemptyset(&sigcatch); | 465 | sigemptyset(&sigcatch); |
459 | cutime = cstime = utime = stime = 0; | 466 | cutime = cstime = utime = stime = 0; |
@@ -520,7 +527,7 @@ static int do_task_stat(struct seq_file *m, struct pid_namespace *ns, | |||
520 | 527 | ||
521 | seq_put_decimal_ull(m, "", pid_nr_ns(pid, ns)); | 528 | seq_put_decimal_ull(m, "", pid_nr_ns(pid, ns)); |
522 | seq_puts(m, " ("); | 529 | seq_puts(m, " ("); |
523 | seq_puts(m, tcomm); | 530 | proc_task_name(m, task, false); |
524 | seq_puts(m, ") "); | 531 | seq_puts(m, ") "); |
525 | seq_putc(m, state); | 532 | seq_putc(m, state); |
526 | seq_put_decimal_ll(m, " ", ppid); | 533 | seq_put_decimal_ll(m, " ", ppid); |