proc: fix /proc/loadavg regression

Commit 95846ecf9d ("pid: replace pid bitmap implementation with IDR
API") changed last field of /proc/loadavg (last pid allocated) to be off
by one:

	# unshare -p -f --mount-proc cat /proc/loadavg
	0.00 0.00 0.00 1/60 2	<===

It should be 1 after first fork into pid namespace.

This is formally a regression but given how useless this field is I
don't think anyone is affected.

Bug was found by /proc testsuite!

Link: http://lkml.kernel.org/r/20180413175408.GA27246@avx2
Fixes: 95846ecf9d ("pid: replace pid bitmap implementation with IDR API")
Signed-off-by: Alexey Dobriyan <adobriyan@gmail.com>
Cc: "Eric W. Biederman" <ebiederm@xmission.com>
Cc: Gargi Sharma <gs051095@gmail.com>
Cc: Oleg Nesterov <oleg@redhat.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
Alexey Dobriyan 2018-04-20 14:56:06 -07:00 committed by Linus Torvalds
parent 2e0ad552f5
commit 9a1015b32f
2 changed files with 2 additions and 2 deletions

View File

@ -1093,7 +1093,7 @@ static int show_spu_loadavg(struct seq_file *s, void *private)
LOAD_INT(c), LOAD_FRAC(c), LOAD_INT(c), LOAD_FRAC(c),
count_active_contexts(), count_active_contexts(),
atomic_read(&nr_spu_contexts), atomic_read(&nr_spu_contexts),
idr_get_cursor(&task_active_pid_ns(current)->idr)); idr_get_cursor(&task_active_pid_ns(current)->idr) - 1);
return 0; return 0;
} }

View File

@ -24,7 +24,7 @@ static int loadavg_proc_show(struct seq_file *m, void *v)
LOAD_INT(avnrun[1]), LOAD_FRAC(avnrun[1]), LOAD_INT(avnrun[1]), LOAD_FRAC(avnrun[1]),
LOAD_INT(avnrun[2]), LOAD_FRAC(avnrun[2]), LOAD_INT(avnrun[2]), LOAD_FRAC(avnrun[2]),
nr_running(), nr_threads, nr_running(), nr_threads,
idr_get_cursor(&task_active_pid_ns(current)->idr)); idr_get_cursor(&task_active_pid_ns(current)->idr) - 1);
return 0; return 0;
} }