diff options
Diffstat (limited to 'kernel')
| -rw-r--r-- | kernel/cgroup/cpuset.c | 13 | 
1 files changed, 9 insertions, 4 deletions
| diff --git a/kernel/cgroup/cpuset.c b/kernel/cgroup/cpuset.c index c12b9fdb22a4..bcb4da8f54c8 100644 --- a/kernel/cgroup/cpuset.c +++ b/kernel/cgroup/cpuset.c @@ -21,6 +21,7 @@   *  License.  See the file COPYING in the main directory of the Linux   *  distribution for more details.   */ +#include "cgroup-internal.h"  #include <linux/cpu.h>  #include <linux/cpumask.h> @@ -5051,10 +5052,14 @@ int proc_cpuset_show(struct seq_file *m, struct pid_namespace *ns,  	if (!buf)  		goto out; -	css = task_get_css(tsk, cpuset_cgrp_id); -	retval = cgroup_path_ns(css->cgroup, buf, PATH_MAX, -				current->nsproxy->cgroup_ns); -	css_put(css); +	rcu_read_lock(); +	spin_lock_irq(&css_set_lock); +	css = task_css(tsk, cpuset_cgrp_id); +	retval = cgroup_path_ns_locked(css->cgroup, buf, PATH_MAX, +				       current->nsproxy->cgroup_ns); +	spin_unlock_irq(&css_set_lock); +	rcu_read_unlock(); +  	if (retval == -E2BIG)  		retval = -ENAMETOOLONG;  	if (retval < 0) |