On 12/26/24 18:07, Suren Baghdasaryan wrote: > vma_start_write() is used in many places and will grow in size very soon. > It is not used in performance critical paths and uninlining it should > limit the future code size growth. > No functional changes. > > Signed-off-by: Suren Baghdasaryan <surenb@xxxxxxxxxx> Reviewed-by: Vlastimil Babka <vbabka@xxxxxxx> > --- a/mm/memory.c > +++ b/mm/memory.c > @@ -6328,6 +6328,20 @@ struct vm_area_struct *lock_mm_and_find_vma(struct mm_struct *mm, > #endif > > #ifdef CONFIG_PER_VMA_LOCK > +void __vma_start_write(struct vm_area_struct *vma, unsigned int mm_lock_seq) > +{ > + down_write(&vma->vm_lock.lock); > + /* > + * We should use WRITE_ONCE() here because we can have concurrent reads > + * from the early lockless pessimistic check in vma_start_read(). > + * We don't really care about the correctness of that early check, but > + * we should use WRITE_ONCE() for cleanliness and to keep KCSAN happy. > + */ > + WRITE_ONCE(vma->vm_lock_seq, mm_lock_seq); > + up_write(&vma->vm_lock.lock); > +} > +EXPORT_SYMBOL_GPL(__vma_start_write); Do any modules need it? If not we shouldn't export. > /* > * Lookup and lock a VMA under RCU protection. Returned VMA is guaranteed to be > * stable and not isolated. If the VMA is not found or is being modified the