Commit ecf371b2 authored by Matthew Wilcox (Oracle)'s avatar Matthew Wilcox (Oracle) Committed by Andrew Morton
Browse files

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: default avatarMatthew Wilcox (Oracle) <willy@infradead.org>
Reviewed-by: default avatarLorenzo Stoakes <lorenzo.stoakes@oracle.com>
Cc: Suren Baghdasaryan <surenb@google.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
parent 31807483
Loading
Loading
Loading
Loading
+5 −8
Original line number Diff line number Diff line
@@ -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;