]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
mlock rcu fix
authorLiam R. Howlett <Liam.Howlett@Oracle.com>
Tue, 16 Mar 2021 20:00:14 +0000 (16:00 -0400)
committerLiam R. Howlett <Liam.Howlett@Oracle.com>
Tue, 16 Mar 2021 20:00:14 +0000 (16:00 -0400)
Signed-off-by: Liam R. Howlett <Liam.Howlett@Oracle.com>
mm/mlock.c

index 8194507c9710dc3729c76039eb8683576455d764..fe2ea9688d3d63d9a7b099c97d9543db278b3b45 100644 (file)
@@ -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;
 }