• Ian Campbell's avatar
    Correct nr_processes() when CPUs have been unplugged · 1d510750
    Ian Campbell authored
    nr_processes() returns the sum of the per cpu counter process_counts for
    all online CPUs. This counter is incremented for the current CPU on
    fork() and decremented for the current CPU on exit(). Since a process
    does not necessarily fork and exit on the same CPU the process_count for
    an individual CPU can be either positive or negative and effectively has
    no meaning in isolation.
    
    Therefore calculating the sum of process_counts over only the online
    CPUs omits the processes which were started or stopped on any CPU which
    has since been unplugged. Only the sum of process_counts across all
    possible CPUs has meaning.
    
    The only caller of nr_processes() is proc_root_getattr() which
    calculates the number of links to /proc as
            stat->nlink = proc_root.nlink + nr_processes();
    
    You don't have to be all that unlucky for the nr_processes() to return a
    negative value leading to a negative number of links (or rather, an
    apparently enormous number of links). If th...
    1d510750
fork.c 42.3 KB