When the procfs root directory is listed using more than one getdents()
call, the process iterator can mistakenly skip a few processes. The
patch corrects this by making the index of the first process entry match
with the static procfs entries. This prevents over-winding of the
process list during subsequent getdents() calls.
Index: sys/miscfs/procfs/procfs_vnops.c
===================================================================
RCS file: /cvs/src/sys/miscfs/procfs/procfs_vnops.c,v
retrieving revision 1.60
diff -N -u -p sys/miscfs/procfs/procfs_vnops.c
--- sys/miscfs/procfs/procfs_vnops.c 8 Jul 2014 17:19:25 -0000 1.60
+++ sys/miscfs/procfs/procfs_vnops.c 19 Aug 2014 13:54:11 -0000
@@ -853,11 +853,15 @@ procfs_readdir(void *v)
#ifdef PROCFS_ZOMBIE
int doingzomb = 0;
#endif
+ int firstproc;
int pcnt = i;
volatile struct process *pr = LIST_FIRST(&allprocess);
- if (pcnt > 3)
- pcnt = 3;
+ firstproc = 4;
+ if (VFSTOPROC(vp->v_mount)->pmnt_flags & PROCFSMNT_LINUXCOMPAT)
+ firstproc += 2;
+ if (pcnt > firstproc)
+ pcnt = firstproc;
#ifdef PROCFS_ZOMBIE
again:
#endif