From: Eric W. Biederman This updates my proc: readdir race fix (take 3) patch to account for the changes made by: Sukadev Bhattiprolu to introduce struct pspace. Signed-off-by: Eric W. Biederman Cc: KAMEZAWA Hiroyuki Signed-off-by: Andrew Morton --- kernel/pid.c | 13 +++++++------ 1 files changed, 7 insertions(+), 6 deletions(-) diff -puN kernel/pid.c~proc-readdir-race-fix-take-3-fix-2 kernel/pid.c --- a/kernel/pid.c~proc-readdir-race-fix-take-3-fix-2 +++ a/kernel/pid.c @@ -149,19 +149,20 @@ static int alloc_pidmap(struct pspace *p return -1; } -static int next_pidmap(int last) +static int next_pidmap(struct pspace *pspace, int last) { int offset; - struct pidmap *map; + struct pidmap *map, *end; offset = (last + 1) & BITS_PER_PAGE_MASK; - map = &pidmap_array[(last + 1)/BITS_PER_PAGE]; - for (; map < &pidmap_array[PIDMAP_ENTRIES]; map++, offset = 0) { + map = &pspace->pidmap[(last + 1)/BITS_PER_PAGE]; + end = &pspace->pidmap[PIDMAP_ENTRIES]; + for (; map < end; map++, offset = 0) { if (unlikely(!map->page)) continue; offset = find_next_bit((map)->page, BITS_PER_PAGE, offset); if (offset < BITS_PER_PAGE) - return mk_pid(map, offset); + return mk_pid(pspace, map, offset); } return -1; } @@ -338,7 +339,7 @@ struct pid *find_ge_pid(int nr) pid = find_pid(nr); if (pid) break; - nr = next_pidmap(nr); + nr = next_pidmap(&init_pspace, nr); } while (nr > 0); return pid; _