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)? > vma_numab_state_init(new); > dup_anon_vma_name(orig, new); >