From: Matthew Wilcox (Oracle) Date: Wed, 19 Nov 2025 04:26:35 +0000 (+0000) Subject: mm: tweak __vma_enter_locked() X-Git-Tag: v6.19-rc1~112^2~26 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ecf371b2cabee6a2bfb61f87d71c9f02a9ff34d7;p=thirdparty%2Fkernel%2Flinux.git mm: tweak __vma_enter_locked() Move the commentary on how __vma_enter_locked() behaves from the body of __vma_start_write() to the head of __vma_enter_locked() and merge it with the existing documentation. Also add a call to mmap_assert_write_locked(). Link: https://lkml.kernel.org/r/20251119042639.3937024-1-willy@infradead.org Signed-off-by: Matthew Wilcox (Oracle) Reviewed-by: Lorenzo Stoakes Cc: Suren Baghdasaryan Signed-off-by: Andrew Morton --- diff --git a/mm/mmap_lock.c b/mm/mmap_lock.c index f2532af6208c0..e6e5570d1ec7b 100644 --- a/mm/mmap_lock.c +++ b/mm/mmap_lock.c @@ -46,9 +46,9 @@ EXPORT_SYMBOL(__mmap_lock_do_trace_released); #ifdef CONFIG_MMU #ifdef CONFIG_PER_VMA_LOCK /* - * Return value: 0 if vma detached, - * 1 if vma attached with no readers, - * -EINTR if signal received, + * __vma_enter_locked() returns 0 immediately if the vma is not + * attached, otherwise it waits for any current readers to finish and + * returns 1. Returns -EINTR if a signal is received while waiting. */ static inline int __vma_enter_locked(struct vm_area_struct *vma, bool detaching, int state) @@ -56,6 +56,8 @@ static inline int __vma_enter_locked(struct vm_area_struct *vma, int err; unsigned int tgt_refcnt = VMA_LOCK_OFFSET; + mmap_assert_write_locked(vma->vm_mm); + /* Additional refcnt if the vma is attached. */ if (!detaching) tgt_refcnt++; @@ -91,11 +93,6 @@ int __vma_start_write(struct vm_area_struct *vma, unsigned int mm_lock_seq, { int locked; - /* - * __vma_enter_locked() returns false immediately if the vma is not - * attached, otherwise it waits until refcnt is indicating that vma - * is attached with no readers. - */ locked = __vma_enter_locked(vma, false, state); if (locked < 0) return locked;