On Mon,  9 Oct 2017 17:13:43 -0400 Gargi Sharma <gs051...@gmail.com> wrote:

> This patch replaces the current bitmap implemetation for
> Process ID allocation. Functions that are no longer required,
> for example, free_pidmap(), alloc_pidmap(), etc. are removed.
> The rest of the functions are modified to use the IDR API.
> The change was made to make the PID allocation less complex by
> replacing custom code with calls to generic API.
> 

I can't say I really understand the locking here.

>
> ...
>
> @@ -240,17 +230,11 @@ void zap_pid_ns_processes(struct pid_namespace *pid_ns)
>        *
>        */
>       read_lock(&tasklist_lock);
> -     nr = next_pidmap(pid_ns, 1);
> -     while (nr > 0) {
> -             rcu_read_lock();
> -
> -             task = pid_task(find_vpid(nr), PIDTYPE_PID);
> +     nr = 2;
> +     idr_for_each_entry_continue(&pid_ns->idr, pid, nr) {
> +             task = pid_task(pid, PIDTYPE_PID);
>               if (task && !__fatal_signal_pending(task))
>                       send_sig_info(SIGKILL, SEND_SIG_FORCED, task);
> -
> -             rcu_read_unlock();
> -
> -             nr = next_pidmap(pid_ns, nr);
>       }
>       read_unlock(&tasklist_lock);

Especially here.  I don't think pidmap_lock is held.  Is that IDR
iteration safe?


Reply via email to