Skip to content

Commit

Permalink
cgroups: add a read-only "procs" file similar to "tasks" that shows o…
Browse files Browse the repository at this point in the history
…nly unique tgids

struct cgroup used to have a bunch of fields for keeping track of the
pidlist for the tasks file.  Those are now separated into a new struct
cgroup_pidlist, of which two are had, one for procs and one for tasks.
The way the seq_file operations are set up is changed so that just the
pidlist struct gets passed around as the private data.

Interface example: Suppose a multithreaded process has pid 1000 and other
threads with ids 1001, 1002, 1003:
$ cat tasks
1000
1001
1002
1003
$ cat cgroup.procs
1000
$

Signed-off-by: Ben Blum <bblum@google.com>
Signed-off-by: Paul Menage <menage@google.com>
Acked-by: Li Zefan <lizf@cn.fujitsu.com>
Cc: Matt Helsley <matthltc@us.ibm.com>
Cc: "Eric W. Biederman" <ebiederm@xmission.com>
Cc: Oleg Nesterov <oleg@redhat.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
  • Loading branch information
Ben Blum authored and Linus Torvalds committed Sep 24, 2009
1 parent 8f3ff20 commit 102a775
Show file tree
Hide file tree
Showing 2 changed files with 186 additions and 114 deletions.
22 changes: 14 additions & 8 deletions include/linux/cgroup.h
Original file line number Diff line number Diff line change
Expand Up @@ -141,6 +141,17 @@ enum {
CGRP_WAIT_ON_RMDIR,
};

struct cgroup_pidlist {
/* protects the other fields */
struct rw_semaphore mutex;
/* array of xids */
pid_t *list;
/* how many elements the above list has */
int length;
/* how many files are using the current array */
int use_count;
};

struct cgroup {
unsigned long flags; /* "unsigned long" so bitops work */

Expand Down Expand Up @@ -179,14 +190,9 @@ struct cgroup {
*/
struct list_head release_list;

/* pids_mutex protects the fields below */
struct rw_semaphore pids_mutex;
/* Array of process ids in the cgroup */
pid_t *tasks_pids;
/* How many files are using the current tasks_pids array */
int pids_use_count;
/* Length of the current tasks_pids array */
int pids_length;
/* we will have two separate pidlists, one for pids (the tasks file)
* and one for tgids (the procs file). */
struct cgroup_pidlist tasks, procs;

/* For RCU-protected deletion */
struct rcu_head rcu_head;
Expand Down
Loading

0 comments on commit 102a775

Please sign in to comment.