diff options
Diffstat (limited to 'mm')
| -rw-r--r-- | mm/mmap_lock.c | 13 |
1 files changed, 5 insertions, 8 deletions
diff --git a/mm/mmap_lock.c b/mm/mmap_lock.c index f2532af6208c..e6e5570d1ec7 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; |