On Tue, Dec 10, 2024 at 3:36 AM Vlastimil Babka <vbabka@xxxxxxx> wrote: > > On 12/6/24 23:52, Suren Baghdasaryan wrote: > > Current implementation does not set detached flag when a VMA is first > > allocated. This does not represent the real state of the VMA, which is > > detached until it is added into mm's VMA tree. Fix this by marking new > > VMAs as detached and resetting detached flag only after VMA is added > > into a tree. > > Introduce vma_mark_attached() to make the API more readable and to > > simplify possible future cleanup when vma->vm_mm might be used to > > indicate detached vma and vma_mark_attached() will need an additional > > mm parameter. > > > > Signed-off-by: Suren Baghdasaryan <surenb@xxxxxxxxxx> > > Reviewed-by: Shakeel Butt <shakeel.butt@xxxxxxxxx> > > Reviewed-by: Lorenzo Stoakes <lorenzo.stoakes@xxxxxxxxxx> > > > diff --git a/kernel/fork.c b/kernel/fork.c > > index 21660a9ad97a..71990f46aa4e 100644 > > --- a/kernel/fork.c > > +++ b/kernel/fork.c > > @@ -465,6 +465,10 @@ struct vm_area_struct *vm_area_dup(struct vm_area_struct *orig) > > data_race(memcpy(new, orig, sizeof(*new))); > > vma_lock_init(new); > > INIT_LIST_HEAD(&new->anon_vma_chain); > > +#ifdef CONFIG_PER_VMA_LOCK > > + /* vma is not locked, can't use vma_mark_detached() */ > > + new->detached = true; > > +#endif > > It occured me we could probably move the detached setting to vma_lock_init() > to avoid the #ifdef (also in the ctor in next patch)? Yes but setting vma->detached inside vma_lock_init() does not seem logical. I went back and forth on this and in the end decided to keep it this way. If the #ifdef-ery is too ugly I can introduce vma_init_detached() or something like that. > > > vma_numab_state_init(new); > > dup_anon_vma_name(orig, new); > >