diff options
| author | Oleg Nesterov <[email protected]> | 2014-12-10 15:45:12 -0800 | 
|---|---|---|
| committer | Linus Torvalds <[email protected]> | 2014-12-10 17:41:09 -0800 | 
| commit | 0f4a0d53f20c76a70cb5b69b6aa237de2107e171 (patch) | |
| tree | 6c1e5e4a323bd542fc07d117acf61824293b5262 /fs/proc/array.c | |
| parent | 4af1036df4dd4f0d59fad9d82ed456bfa2e73fa6 (diff) | |
proc: task_state: deuglify the max_fds calculation
1. The usage of fdt looks very ugly, it can't be NULL if ->files is
   not NULL. We can use "unsigned int max_fds" instead.
2. This also allows to move seq_printf(max_fds) outside of task_lock()
   and join it with the previous seq_printf(). See also the next patch.
Signed-off-by: Oleg Nesterov <[email protected]>
Cc: Aaron Tomlin <[email protected]>
Cc: Alexey Dobriyan <[email protected]>
Cc: "Eric W. Biederman" <[email protected]>,
Cc: Sterling Alexander <[email protected]>
Cc: Peter Zijlstra <[email protected]>
Cc: Roland McGrath <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
Diffstat (limited to 'fs/proc/array.c')
| -rw-r--r-- | fs/proc/array.c | 23 | 
1 files changed, 11 insertions, 12 deletions
| diff --git a/fs/proc/array.c b/fs/proc/array.c index b5810c228c10..7c8d9aecb070 100644 --- a/fs/proc/array.c +++ b/fs/proc/array.c @@ -157,9 +157,9 @@ static inline void task_state(struct seq_file *m, struct pid_namespace *ns,  	struct user_namespace *user_ns = seq_user_ns(m);  	struct group_info *group_info;  	int g; -	struct fdtable *fdt = NULL;  	const struct cred *cred;  	pid_t ppid, tpid; +	unsigned int max_fds = 0;  	rcu_read_lock();  	ppid = pid_alive(p) ? @@ -171,6 +171,12 @@ static inline void task_state(struct seq_file *m, struct pid_namespace *ns,  			tpid = task_pid_nr_ns(tracer, ns);  	}  	cred = get_task_cred(p); + +	task_lock(p); +	if (p->files) +		max_fds = files_fdtable(p->files)->max_fds; +	task_unlock(p); +  	seq_printf(m,  		"State:\t%s\n"  		"Tgid:\t%d\n" @@ -179,7 +185,8 @@ static inline void task_state(struct seq_file *m, struct pid_namespace *ns,  		"PPid:\t%d\n"  		"TracerPid:\t%d\n"  		"Uid:\t%d\t%d\t%d\t%d\n" -		"Gid:\t%d\t%d\t%d\t%d\n", +		"Gid:\t%d\t%d\t%d\t%d\n" +		"FDSize:\t%d\nGroups:\t",  		get_task_state(p),  		task_tgid_nr_ns(p, ns),  		task_numa_group_id(p), @@ -192,16 +199,8 @@ static inline void task_state(struct seq_file *m, struct pid_namespace *ns,  		from_kgid_munged(user_ns, cred->gid),  		from_kgid_munged(user_ns, cred->egid),  		from_kgid_munged(user_ns, cred->sgid), -		from_kgid_munged(user_ns, cred->fsgid)); - -	task_lock(p); -	if (p->files) -		fdt = files_fdtable(p->files); -	seq_printf(m, -		"FDSize:\t%d\n" -		"Groups:\t", -		fdt ? fdt->max_fds : 0); -	task_unlock(p); +		from_kgid_munged(user_ns, cred->fsgid), +		max_fds);  	rcu_read_unlock();  	group_info = cred->group_info; |