diff options
| author | Dave Airlie <airlied@starflyer.(none)> | 2005-09-25 13:14:45 +1000 |
|---|---|---|
| committer | Dave Airlie <airlied@linux.ie> | 2005-09-25 13:14:45 +1000 |
| commit | 4e0c1159d83a658d1ffba5bc3442f4ec4cadb436 (patch) | |
| tree | 36a5079ba7ba9b9e0f2f633356705b980940eac4 /fs/proc/array.c | |
| parent | ea98a92ff18c03bf7f4d21536986cbbcb4c10cd9 (diff) | |
| parent | ef6bd6eb90ad72ee8ee7ba8b271f27102e9a90c1 (diff) | |
update from upstream
Diffstat (limited to 'fs/proc/array.c')
| -rw-r--r-- | fs/proc/array.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/fs/proc/array.c b/fs/proc/array.c index 37668fe998ad..d84eecacbeaf 100644 --- a/fs/proc/array.c +++ b/fs/proc/array.c @@ -74,6 +74,7 @@ #include <linux/file.h> #include <linux/times.h> #include <linux/cpuset.h> +#include <linux/rcupdate.h> #include <asm/uaccess.h> #include <asm/pgtable.h> @@ -159,6 +160,7 @@ static inline char * task_state(struct task_struct *p, char *buffer) { struct group_info *group_info; int g; + struct fdtable *fdt = NULL; read_lock(&tasklist_lock); buffer += sprintf(buffer, @@ -179,10 +181,14 @@ static inline char * task_state(struct task_struct *p, char *buffer) p->gid, p->egid, p->sgid, p->fsgid); read_unlock(&tasklist_lock); task_lock(p); + rcu_read_lock(); + if (p->files) + fdt = files_fdtable(p->files); buffer += sprintf(buffer, "FDSize:\t%d\n" "Groups:\t", - p->files ? p->files->max_fds : 0); + fdt ? fdt->max_fds : 0); + rcu_read_unlock(); group_info = p->group_info; get_group_info(group_info); |
