From: Liam R. Howlett Date: Tue, 16 Mar 2021 20:00:14 +0000 (-0400) Subject: mlock rcu fix X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=48aa7fd12cde5ec87cd319b7878c0efb98760f9e;p=users%2Fjedix%2Flinux-maple.git mlock rcu fix Signed-off-by: Liam R. Howlett --- diff --git a/mm/mlock.c b/mm/mlock.c index 8194507c9710..fe2ea9688d3d 100644 --- a/mm/mlock.c +++ b/mm/mlock.c @@ -623,6 +623,7 @@ static unsigned long count_mm_mlocked_page_nr(struct mm_struct *mm, if (mm == NULL) mm = current->mm; + rcu_read_lock(); mas_for_each(&mas, vma, start + len) { if (start >= vma->vm_end) continue; @@ -638,6 +639,7 @@ static unsigned long count_mm_mlocked_page_nr(struct mm_struct *mm, count += vma->vm_end - vma->vm_start; } } + rcu_read_unlock(); return count >> PAGE_SHIFT; } @@ -757,6 +759,7 @@ static int apply_mlockall_flags(int flags) to_add |= VM_LOCKONFAULT; } + rcu_read_lock(); mas_for_each(&mas, vma, ULONG_MAX) { vm_flags_t newflags; @@ -765,9 +768,12 @@ static int apply_mlockall_flags(int flags) /* Ignore errors */ mlock_fixup(vma, &prev, vma->vm_start, vma->vm_end, newflags); + rcu_read_unlock(); mas_pause(&mas); cond_resched(); + rcu_read_lock(); } + rcu_read_unlock(); out: return 0; }