On Wed, Jun 30, 2021 at 11:44 AM Suren Baghdasaryan <surenb@xxxxxxxxxx> wrote: > [...] > > > + /* > > > + * If the task is dying and in the process of releasing its memory > > > + * then get its mm. > > > + */ > > > + task_lock(task); > > > + if (task_will_free_mem(task) && (task->flags & PF_KTHREAD) == 0) { > > > > task_will_free_mem() is fine here but I think in parallel we should > > optimize this function. At the moment it is traversing all the > > processes on the machine. It is very normal to have tens of thousands > > of processes on big machines, so it would be really costly when > > reaping a bunch of processes. > > Hmm. But I think we still need to make sure that the mm is not shared > with another non-dying process. IIUC that's the point of that > traversal. Am I mistaken? You are right. I am talking about efficiently finding all processes which are sharing mm (maybe linked into another list) instead of traversing all the processes on the system.