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

index 1e22a5a2e25d6b732629bdca365a0e59d71bb328..613f0bdc8b34d6df96ad209c85f5359581ec277b 100644 (file)
@@ -2099,6 +2099,8 @@ static unsigned int khugepaged_scan_mm_slot(unsigned int pages,
        mas_set(&mas, khugepaged_scan.address);
        if (unlikely(!mmap_read_trylock(mm)))
                goto breakouterloop_mmap_lock;
+
+       rcu_read_lock();
        if (likely(!khugepaged_test_exit(mm)))
                vma = mas_find(&mas, ULONG_MAX);
 
@@ -2142,6 +2144,7 @@ skip:
                                pgoff_t pgoff = linear_page_index(vma,
                                                khugepaged_scan.address);
 
+                               rcu_read_unlock();
                                mmap_read_unlock(mm);
                                ret = 1;
                                khugepaged_scan_file(mm, file, pgoff, hpage);
@@ -2162,6 +2165,7 @@ skip:
                }
        }
 breakouterloop:
+       rcu_unread_lock();
        mmap_read_unlock(mm); /* exit_mmap will destroy ptes after this */
 breakouterloop_mmap_lock: