- add get_pid_ns()/put_pid_ns() - remove prefix "pids_" Signed-off-by: Li Zefan <lizf@xxxxxxxxxxxxxx> --- kernel/cgroup.c | 30 +++++++++++++++++------------- 1 files changed, 17 insertions(+), 13 deletions(-) diff --git a/kernel/cgroup.c b/kernel/cgroup.c index 13dddb4..ba675de 100644 --- a/kernel/cgroup.c +++ b/kernel/cgroup.c @@ -2213,13 +2213,13 @@ struct cgroup_pids { /* The cgroup those pids belong to */ struct cgroup *cgrp; /* The namepsace those pids belong to */ - struct pid_namespace *pid_ns; + struct pid_namespace *ns; /* Array of process ids in the cgroup */ pid_t *tasks_pids; /* How many files are using the this tasks_pids array */ - int pids_use_count; + int use_count; /* Length of the current tasks_pids array */ - int pids_length; + int length; }; static int cmppid(const void *a, const void *b) @@ -2248,7 +2248,7 @@ static void *cgroup_tasks_start(struct seq_file *s, loff_t *pos) down_read(&cgrp->pids_mutex); if (pid) { - int end = cp->pids_length; + int end = cp->length; while (index < end) { int mid = (index + end) / 2; @@ -2262,7 +2262,7 @@ static void *cgroup_tasks_start(struct seq_file *s, loff_t *pos) } } /* If we're off the end of the array, we're done */ - if (index >= cp->pids_length) + if (index >= cp->length) return NULL; /* Update the abstract position to be the actual pid that we found */ iter = cp->tasks_pids + index; @@ -2281,7 +2281,7 @@ static void *cgroup_tasks_next(struct seq_file *s, void *v, loff_t *pos) { struct cgroup_pids *cp = s->private; int *p = v; - int *end = cp->tasks_pids + cp->pids_length; + int *end = cp->tasks_pids + cp->length; /* * Advance to the next pid in the array. If this goes off the @@ -2313,9 +2313,10 @@ static void release_cgroup_pid_array(struct cgroup_pids *cp) struct cgroup *cgrp = cp->cgrp; down_write(&cgrp->pids_mutex); - BUG_ON(!cp->pids_use_count); - if (!--cp->pids_use_count) { + BUG_ON(!cp->use_count); + if (!--cp->use_count) { list_del(&cp->list); + put_pid_ns(cp->ns); kfree(cp->tasks_pids); kfree(cp); } @@ -2352,7 +2353,7 @@ static struct file_operations cgroup_tasks_operations = { static int cgroup_tasks_open(struct inode *unused, struct file *file) { struct cgroup *cgrp = __d_cgrp(file->f_dentry->d_parent); - struct pid_namespace *pid_ns = task_active_pid_ns(current); + struct pid_namespace *ns; struct cgroup_pids *cp; pid_t *pidarray; int npids; @@ -2381,9 +2382,12 @@ static int cgroup_tasks_open(struct inode *unused, struct file *file) */ down_write(&cgrp->pids_mutex); + ns = get_pid_ns(current->nsproxy->pid_ns); list_for_each_entry(cp, &cgrp->pids_list, list) { - if (pid_ns == cp->pid_ns) + if (ns == cp->ns) { + put_pid_ns(ns); goto found; + } } cp = kzalloc(sizeof(*cp), GFP_KERNEL); @@ -2393,13 +2397,13 @@ static int cgroup_tasks_open(struct inode *unused, struct file *file) return -ENOMEM; } cp->cgrp = cgrp; - cp->pid_ns = pid_ns; + cp->ns = ns; list_add(&cp->list, &cgrp->pids_list); found: kfree(cp->tasks_pids); cp->tasks_pids = pidarray; - cp->pids_length = npids; - cp->pids_use_count++; + cp->length = npids; + cp->use_count++; up_write(&cgrp->pids_mutex); file->f_op = &cgroup_tasks_operations; -- 1.5.4.rc3 _______________________________________________ Containers mailing list Containers@xxxxxxxxxxxxxxxxxxxxxxxxxx https://lists.linux-foundation.org/mailman/listinfo/containers