|
@@ -74,6 +74,7 @@
|
|
#include <linux/file.h>
|
|
#include <linux/file.h>
|
|
#include <linux/times.h>
|
|
#include <linux/times.h>
|
|
#include <linux/cpuset.h>
|
|
#include <linux/cpuset.h>
|
|
|
|
+#include <linux/rcupdate.h>
|
|
|
|
|
|
#include <asm/uaccess.h>
|
|
#include <asm/uaccess.h>
|
|
#include <asm/pgtable.h>
|
|
#include <asm/pgtable.h>
|
|
@@ -180,12 +181,14 @@ static inline char * task_state(struct task_struct *p, char *buffer)
|
|
p->gid, p->egid, p->sgid, p->fsgid);
|
|
p->gid, p->egid, p->sgid, p->fsgid);
|
|
read_unlock(&tasklist_lock);
|
|
read_unlock(&tasklist_lock);
|
|
task_lock(p);
|
|
task_lock(p);
|
|
|
|
+ rcu_read_lock();
|
|
if (p->files)
|
|
if (p->files)
|
|
fdt = files_fdtable(p->files);
|
|
fdt = files_fdtable(p->files);
|
|
buffer += sprintf(buffer,
|
|
buffer += sprintf(buffer,
|
|
"FDSize:\t%d\n"
|
|
"FDSize:\t%d\n"
|
|
"Groups:\t",
|
|
"Groups:\t",
|
|
fdt ? fdt->max_fds : 0);
|
|
fdt ? fdt->max_fds : 0);
|
|
|
|
+ rcu_read_unlock();
|
|
|
|
|
|
group_info = p->group_info;
|
|
group_info = p->group_info;
|
|
get_group_info(group_info);
|
|
get_group_info(group_info);
|