Re: [PATCH 39/41] kernel/fork: throttle call_rcu() calls in vm_area_free

From: Michal Hocko
Date: Mon Jan 23 2023 - 14:19:26 EST


On Mon 23-01-23 18:23:08, Matthew Wilcox wrote:
> On Mon, Jan 23, 2023 at 09:46:20AM -0800, Suren Baghdasaryan wrote:
[...]
> > Yes, batching the vmas into a list and draining it in remove_mt() and
> > exit_mmap() as you suggested makes sense to me and is quite simple.
> > Let's do that if nobody has objections.
>
> I object. We *know* nobody has a reference to any of the VMAs because
> you have to have a refcount on the mm before you can get a reference
> to a VMA. If Michal is saying that somebody could do:
>
> mmget(mm);
> vma = find_vma(mm);
> lock_vma(vma);
> mmput(mm);
> vma->a = b;
> unlock_vma(mm, vma);
>
> then that's something we'd catch in review -- you obviously can't use
> the mm after you've dropped your reference to it.

I am not claiming this is possible now. I do not think we want to have
something like that in the future either but that is really hard to
envision. I am claiming that it is subtle and potentially error prone to
have two different ways of mass vma freeing wrt. locking. Also, don't we
have a very similar situation during last munmaps?

--
Michal Hocko
SUSE Labs