mm/oom_kill: Use maple tree iterators instead of vma linked list
authorLiam R. Howlett <Liam.Howlett@Oracle.com>
Mon, 4 Jan 2021 20:06:25 +0000 (15:06 -0500)
committerLiam R. Howlett <Liam.Howlett@oracle.com>
Wed, 20 Oct 2021 19:22:36 +0000 (15:22 -0400)
Signed-off-by: Liam R. Howlett <Liam.Howlett@Oracle.com>
mm/oom_kill.c

index 831340e7ad8b4721a066c7d7d850e9b841ab38ff..e0334667d36ad302afdc076f046b27915529bb25 100644 (file)
@@ -516,6 +516,7 @@ bool __oom_reap_task_mm(struct mm_struct *mm)
 {
        struct vm_area_struct *vma;
        bool ret = true;
+       MA_STATE(mas, &mm->mm_mt, 0, 0);
 
        /*
         * Tell all users of get_user/copy_from_user etc... that the content
@@ -525,7 +526,8 @@ bool __oom_reap_task_mm(struct mm_struct *mm)
         */
        set_bit(MMF_UNSTABLE, &mm->flags);
 
-       for (vma = mm->mmap ; vma; vma = vma->vm_next) {
+       rcu_read_lock();
+       mas_for_each(&mas, vma, ULONG_MAX) {
                if (!can_madv_lru_vma(vma))
                        continue;
 
@@ -557,6 +559,7 @@ bool __oom_reap_task_mm(struct mm_struct *mm)
                        tlb_finish_mmu(&tlb);
                }
        }
+       rcu_read_unlock();
 
        return ret;
 }