aboutsummaryrefslogtreecommitdiffstats
path: root/fs/proc/array.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/proc/array.c')
-rw-r--r--fs/proc/array.c189
1 files changed, 92 insertions, 97 deletions
diff --git a/fs/proc/array.c b/fs/proc/array.c
index 88c7de12197b..89600fd5963d 100644
--- a/fs/proc/array.c
+++ b/fs/proc/array.c
@@ -186,51 +186,45 @@ static inline void task_state(struct seq_file *m, struct pid_namespace *ns,
186 task_unlock(p); 186 task_unlock(p);
187 rcu_read_unlock(); 187 rcu_read_unlock();
188 188
189 seq_printf(m, 189 seq_printf(m, "State:\t%s", get_task_state(p));
190 "State:\t%s\n" 190
191 "Tgid:\t%d\n" 191 seq_put_decimal_ull(m, "\nTgid:\t", tgid);
192 "Ngid:\t%d\n" 192 seq_put_decimal_ull(m, "\nNgid:\t", ngid);
193 "Pid:\t%d\n" 193 seq_put_decimal_ull(m, "\nPid:\t", pid_nr_ns(pid, ns));
194 "PPid:\t%d\n" 194 seq_put_decimal_ull(m, "\nPPid:\t", ppid);
195 "TracerPid:\t%d\n" 195 seq_put_decimal_ull(m, "\nTracerPid:\t", tpid);
196 "Uid:\t%d\t%d\t%d\t%d\n" 196 seq_put_decimal_ull(m, "\nUid:\t", from_kuid_munged(user_ns, cred->uid));
197 "Gid:\t%d\t%d\t%d\t%d\n" 197 seq_put_decimal_ull(m, "\t", from_kuid_munged(user_ns, cred->euid));
198 "FDSize:\t%d\nGroups:\t", 198 seq_put_decimal_ull(m, "\t", from_kuid_munged(user_ns, cred->suid));
199 get_task_state(p), 199 seq_put_decimal_ull(m, "\t", from_kuid_munged(user_ns, cred->fsuid));
200 tgid, ngid, pid_nr_ns(pid, ns), ppid, tpid, 200 seq_put_decimal_ull(m, "\nGid:\t", from_kgid_munged(user_ns, cred->gid));
201 from_kuid_munged(user_ns, cred->uid), 201 seq_put_decimal_ull(m, "\t", from_kgid_munged(user_ns, cred->egid));
202 from_kuid_munged(user_ns, cred->euid), 202 seq_put_decimal_ull(m, "\t", from_kgid_munged(user_ns, cred->sgid));
203 from_kuid_munged(user_ns, cred->suid), 203 seq_put_decimal_ull(m, "\t", from_kgid_munged(user_ns, cred->fsgid));
204 from_kuid_munged(user_ns, cred->fsuid), 204 seq_put_decimal_ull(m, "\nFDSize:\t", max_fds);
205 from_kgid_munged(user_ns, cred->gid), 205
206 from_kgid_munged(user_ns, cred->egid), 206 seq_puts(m, "\nGroups:\t");
207 from_kgid_munged(user_ns, cred->sgid),
208 from_kgid_munged(user_ns, cred->fsgid),
209 max_fds);
210
211 group_info = cred->group_info; 207 group_info = cred->group_info;
212 for (g = 0; g < group_info->ngroups; g++) 208 for (g = 0; g < group_info->ngroups; g++)
213 seq_printf(m, "%d ", 209 seq_put_decimal_ull(m, g ? " " : "",
214 from_kgid_munged(user_ns, GROUP_AT(group_info, g))); 210 from_kgid_munged(user_ns, group_info->gid[g]));
215 put_cred(cred); 211 put_cred(cred);
212 /* Trailing space shouldn't have been added in the first place. */
213 seq_putc(m, ' ');
216 214
217#ifdef CONFIG_PID_NS 215#ifdef CONFIG_PID_NS
218 seq_puts(m, "\nNStgid:"); 216 seq_puts(m, "\nNStgid:");
219 for (g = ns->level; g <= pid->level; g++) 217 for (g = ns->level; g <= pid->level; g++)
220 seq_printf(m, "\t%d", 218 seq_put_decimal_ull(m, "\t", task_tgid_nr_ns(p, pid->numbers[g].ns));
221 task_tgid_nr_ns(p, pid->numbers[g].ns));
222 seq_puts(m, "\nNSpid:"); 219 seq_puts(m, "\nNSpid:");
223 for (g = ns->level; g <= pid->level; g++) 220 for (g = ns->level; g <= pid->level; g++)
224 seq_printf(m, "\t%d", 221 seq_put_decimal_ull(m, "\t", task_pid_nr_ns(p, pid->numbers[g].ns));
225 task_pid_nr_ns(p, pid->numbers[g].ns));
226 seq_puts(m, "\nNSpgid:"); 222 seq_puts(m, "\nNSpgid:");
227 for (g = ns->level; g <= pid->level; g++) 223 for (g = ns->level; g <= pid->level; g++)
228 seq_printf(m, "\t%d", 224 seq_put_decimal_ull(m, "\t", task_pgrp_nr_ns(p, pid->numbers[g].ns));
229 task_pgrp_nr_ns(p, pid->numbers[g].ns));
230 seq_puts(m, "\nNSsid:"); 225 seq_puts(m, "\nNSsid:");
231 for (g = ns->level; g <= pid->level; g++) 226 for (g = ns->level; g <= pid->level; g++)
232 seq_printf(m, "\t%d", 227 seq_put_decimal_ull(m, "\t", task_session_nr_ns(p, pid->numbers[g].ns));
233 task_session_nr_ns(p, pid->numbers[g].ns));
234#endif 228#endif
235 seq_putc(m, '\n'); 229 seq_putc(m, '\n');
236} 230}
@@ -299,11 +293,12 @@ static inline void task_sig(struct seq_file *m, struct task_struct *p)
299 unlock_task_sighand(p, &flags); 293 unlock_task_sighand(p, &flags);
300 } 294 }
301 295
302 seq_printf(m, "Threads:\t%d\n", num_threads); 296 seq_put_decimal_ull(m, "Threads:\t", num_threads);
303 seq_printf(m, "SigQ:\t%lu/%lu\n", qsize, qlim); 297 seq_put_decimal_ull(m, "\nSigQ:\t", qsize);
298 seq_put_decimal_ull(m, "/", qlim);
304 299
305 /* render them all */ 300 /* render them all */
306 render_sigset_t(m, "SigPnd:\t", &pending); 301 render_sigset_t(m, "\nSigPnd:\t", &pending);
307 render_sigset_t(m, "ShdPnd:\t", &shpending); 302 render_sigset_t(m, "ShdPnd:\t", &shpending);
308 render_sigset_t(m, "SigBlk:\t", &blocked); 303 render_sigset_t(m, "SigBlk:\t", &blocked);
309 render_sigset_t(m, "SigIgn:\t", &ignored); 304 render_sigset_t(m, "SigIgn:\t", &ignored);
@@ -348,17 +343,17 @@ static inline void task_cap(struct seq_file *m, struct task_struct *p)
348static inline void task_seccomp(struct seq_file *m, struct task_struct *p) 343static inline void task_seccomp(struct seq_file *m, struct task_struct *p)
349{ 344{
350#ifdef CONFIG_SECCOMP 345#ifdef CONFIG_SECCOMP
351 seq_printf(m, "Seccomp:\t%d\n", p->seccomp.mode); 346 seq_put_decimal_ull(m, "Seccomp:\t", p->seccomp.mode);
347 seq_putc(m, '\n');
352#endif 348#endif
353} 349}
354 350
355static inline void task_context_switch_counts(struct seq_file *m, 351static inline void task_context_switch_counts(struct seq_file *m,
356 struct task_struct *p) 352 struct task_struct *p)
357{ 353{
358 seq_printf(m, "voluntary_ctxt_switches:\t%lu\n" 354 seq_put_decimal_ull(m, "voluntary_ctxt_switches:\t", p->nvcsw);
359 "nonvoluntary_ctxt_switches:\t%lu\n", 355 seq_put_decimal_ull(m, "\nnonvoluntary_ctxt_switches:\t", p->nivcsw);
360 p->nvcsw, 356 seq_putc(m, '\n');
361 p->nivcsw);
362} 357}
363 358
364static void task_cpus_allowed(struct seq_file *m, struct task_struct *task) 359static void task_cpus_allowed(struct seq_file *m, struct task_struct *task)
@@ -490,41 +485,41 @@ static int do_task_stat(struct seq_file *m, struct pid_namespace *ns,
490 start_time = nsec_to_clock_t(task->real_start_time); 485 start_time = nsec_to_clock_t(task->real_start_time);
491 486
492 seq_printf(m, "%d (%s) %c", pid_nr_ns(pid, ns), tcomm, state); 487 seq_printf(m, "%d (%s) %c", pid_nr_ns(pid, ns), tcomm, state);
493 seq_put_decimal_ll(m, ' ', ppid); 488 seq_put_decimal_ll(m, " ", ppid);
494 seq_put_decimal_ll(m, ' ', pgid); 489 seq_put_decimal_ll(m, " ", pgid);
495 seq_put_decimal_ll(m, ' ', sid); 490 seq_put_decimal_ll(m, " ", sid);
496 seq_put_decimal_ll(m, ' ', tty_nr); 491 seq_put_decimal_ll(m, " ", tty_nr);
497 seq_put_decimal_ll(m, ' ', tty_pgrp); 492 seq_put_decimal_ll(m, " ", tty_pgrp);
498 seq_put_decimal_ull(m, ' ', task->flags); 493 seq_put_decimal_ull(m, " ", task->flags);
499 seq_put_decimal_ull(m, ' ', min_flt); 494 seq_put_decimal_ull(m, " ", min_flt);
500 seq_put_decimal_ull(m, ' ', cmin_flt); 495 seq_put_decimal_ull(m, " ", cmin_flt);
501 seq_put_decimal_ull(m, ' ', maj_flt); 496 seq_put_decimal_ull(m, " ", maj_flt);
502 seq_put_decimal_ull(m, ' ', cmaj_flt); 497 seq_put_decimal_ull(m, " ", cmaj_flt);
503 seq_put_decimal_ull(m, ' ', cputime_to_clock_t(utime)); 498 seq_put_decimal_ull(m, " ", cputime_to_clock_t(utime));
504 seq_put_decimal_ull(m, ' ', cputime_to_clock_t(stime)); 499 seq_put_decimal_ull(m, " ", cputime_to_clock_t(stime));
505 seq_put_decimal_ll(m, ' ', cputime_to_clock_t(cutime)); 500 seq_put_decimal_ll(m, " ", cputime_to_clock_t(cutime));
506 seq_put_decimal_ll(m, ' ', cputime_to_clock_t(cstime)); 501 seq_put_decimal_ll(m, " ", cputime_to_clock_t(cstime));
507 seq_put_decimal_ll(m, ' ', priority); 502 seq_put_decimal_ll(m, " ", priority);
508 seq_put_decimal_ll(m, ' ', nice); 503 seq_put_decimal_ll(m, " ", nice);
509 seq_put_decimal_ll(m, ' ', num_threads); 504 seq_put_decimal_ll(m, " ", num_threads);
510 seq_put_decimal_ull(m, ' ', 0); 505 seq_put_decimal_ull(m, " ", 0);
511 seq_put_decimal_ull(m, ' ', start_time); 506 seq_put_decimal_ull(m, " ", start_time);
512 seq_put_decimal_ull(m, ' ', vsize); 507 seq_put_decimal_ull(m, " ", vsize);
513 seq_put_decimal_ull(m, ' ', mm ? get_mm_rss(mm) : 0); 508 seq_put_decimal_ull(m, " ", mm ? get_mm_rss(mm) : 0);
514 seq_put_decimal_ull(m, ' ', rsslim); 509 seq_put_decimal_ull(m, " ", rsslim);
515 seq_put_decimal_ull(m, ' ', mm ? (permitted ? mm->start_code : 1) : 0); 510 seq_put_decimal_ull(m, " ", mm ? (permitted ? mm->start_code : 1) : 0);
516 seq_put_decimal_ull(m, ' ', mm ? (permitted ? mm->end_code : 1) : 0); 511 seq_put_decimal_ull(m, " ", mm ? (permitted ? mm->end_code : 1) : 0);
517 seq_put_decimal_ull(m, ' ', (permitted && mm) ? mm->start_stack : 0); 512 seq_put_decimal_ull(m, " ", (permitted && mm) ? mm->start_stack : 0);
518 seq_put_decimal_ull(m, ' ', esp); 513 seq_put_decimal_ull(m, " ", esp);
519 seq_put_decimal_ull(m, ' ', eip); 514 seq_put_decimal_ull(m, " ", eip);
520 /* The signal information here is obsolete. 515 /* The signal information here is obsolete.
521 * It must be decimal for Linux 2.0 compatibility. 516 * It must be decimal for Linux 2.0 compatibility.
522 * Use /proc/#/status for real-time signals. 517 * Use /proc/#/status for real-time signals.
523 */ 518 */
524 seq_put_decimal_ull(m, ' ', task->pending.signal.sig[0] & 0x7fffffffUL); 519 seq_put_decimal_ull(m, " ", task->pending.signal.sig[0] & 0x7fffffffUL);
525 seq_put_decimal_ull(m, ' ', task->blocked.sig[0] & 0x7fffffffUL); 520 seq_put_decimal_ull(m, " ", task->blocked.sig[0] & 0x7fffffffUL);
526 seq_put_decimal_ull(m, ' ', sigign.sig[0] & 0x7fffffffUL); 521 seq_put_decimal_ull(m, " ", sigign.sig[0] & 0x7fffffffUL);
527 seq_put_decimal_ull(m, ' ', sigcatch.sig[0] & 0x7fffffffUL); 522 seq_put_decimal_ull(m, " ", sigcatch.sig[0] & 0x7fffffffUL);
528 523
529 /* 524 /*
530 * We used to output the absolute kernel address, but that's an 525 * We used to output the absolute kernel address, but that's an
@@ -538,31 +533,31 @@ static int do_task_stat(struct seq_file *m, struct pid_namespace *ns,
538 else 533 else
539 seq_puts(m, " 0"); 534 seq_puts(m, " 0");
540 535
541 seq_put_decimal_ull(m, ' ', 0); 536 seq_put_decimal_ull(m, " ", 0);
542 seq_put_decimal_ull(m, ' ', 0); 537 seq_put_decimal_ull(m, " ", 0);
543 seq_put_decimal_ll(m, ' ', task->exit_signal); 538 seq_put_decimal_ll(m, " ", task->exit_signal);
544 seq_put_decimal_ll(m, ' ', task_cpu(task)); 539 seq_put_decimal_ll(m, " ", task_cpu(task));
545 seq_put_decimal_ull(m, ' ', task->rt_priority); 540 seq_put_decimal_ull(m, " ", task->rt_priority);
546 seq_put_decimal_ull(m, ' ', task->policy); 541 seq_put_decimal_ull(m, " ", task->policy);
547 seq_put_decimal_ull(m, ' ', delayacct_blkio_ticks(task)); 542 seq_put_decimal_ull(m, " ", delayacct_blkio_ticks(task));
548 seq_put_decimal_ull(m, ' ', cputime_to_clock_t(gtime)); 543 seq_put_decimal_ull(m, " ", cputime_to_clock_t(gtime));
549 seq_put_decimal_ll(m, ' ', cputime_to_clock_t(cgtime)); 544 seq_put_decimal_ll(m, " ", cputime_to_clock_t(cgtime));
550 545
551 if (mm && permitted) { 546 if (mm && permitted) {
552 seq_put_decimal_ull(m, ' ', mm->start_data); 547 seq_put_decimal_ull(m, " ", mm->start_data);
553 seq_put_decimal_ull(m, ' ', mm->end_data); 548 seq_put_decimal_ull(m, " ", mm->end_data);
554 seq_put_decimal_ull(m, ' ', mm->start_brk); 549 seq_put_decimal_ull(m, " ", mm->start_brk);
555 seq_put_decimal_ull(m, ' ', mm->arg_start); 550 seq_put_decimal_ull(m, " ", mm->arg_start);
556 seq_put_decimal_ull(m, ' ', mm->arg_end); 551 seq_put_decimal_ull(m, " ", mm->arg_end);
557 seq_put_decimal_ull(m, ' ', mm->env_start); 552 seq_put_decimal_ull(m, " ", mm->env_start);
558 seq_put_decimal_ull(m, ' ', mm->env_end); 553 seq_put_decimal_ull(m, " ", mm->env_end);
559 } else 554 } else
560 seq_printf(m, " 0 0 0 0 0 0 0"); 555 seq_puts(m, " 0 0 0 0 0 0 0");
561 556
562 if (permitted) 557 if (permitted)
563 seq_put_decimal_ll(m, ' ', task->exit_code); 558 seq_put_decimal_ll(m, " ", task->exit_code);
564 else 559 else
565 seq_put_decimal_ll(m, ' ', 0); 560 seq_puts(m, " 0");
566 561
567 seq_putc(m, '\n'); 562 seq_putc(m, '\n');
568 if (mm) 563 if (mm)
@@ -598,13 +593,13 @@ int proc_pid_statm(struct seq_file *m, struct pid_namespace *ns,
598 * seq_printf(m, "%lu %lu %lu %lu 0 %lu 0\n", 593 * seq_printf(m, "%lu %lu %lu %lu 0 %lu 0\n",
599 * size, resident, shared, text, data); 594 * size, resident, shared, text, data);
600 */ 595 */
601 seq_put_decimal_ull(m, 0, size); 596 seq_put_decimal_ull(m, "", size);
602 seq_put_decimal_ull(m, ' ', resident); 597 seq_put_decimal_ull(m, " ", resident);
603 seq_put_decimal_ull(m, ' ', shared); 598 seq_put_decimal_ull(m, " ", shared);
604 seq_put_decimal_ull(m, ' ', text); 599 seq_put_decimal_ull(m, " ", text);
605 seq_put_decimal_ull(m, ' ', 0); 600 seq_put_decimal_ull(m, " ", 0);
606 seq_put_decimal_ull(m, ' ', data); 601 seq_put_decimal_ull(m, " ", data);
607 seq_put_decimal_ull(m, ' ', 0); 602 seq_put_decimal_ull(m, " ", 0);
608 seq_putc(m, '\n'); 603 seq_putc(m, '\n');
609 604
610 return 0; 605 return 0;