]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
mm/ksm: Fix MA_STATE() init with valid mm struct
authorLiam R. Howlett <Liam.Howlett@Oracle.com>
Tue, 22 Dec 2020 19:48:47 +0000 (14:48 -0500)
committerLiam R. Howlett <Liam.Howlett@Oracle.com>
Tue, 5 Jan 2021 17:33:42 +0000 (12:33 -0500)
The mm struct would not be initialized, fix it by moving the MA_STATE() init
to a later stage of the functions

Signed-off-by: Liam R. Howlett <Liam.Howlett@Oracle.com>
mm/ksm.c

index defe9c3eb9a91b61a438642f62f5689cfae6123d..9aa579cef76142f0f8483e556a8371d331349f77 100644 (file)
--- a/mm/ksm.c
+++ b/mm/ksm.c
@@ -968,7 +968,6 @@ static int unmerge_and_remove_all_rmap_items(void)
        struct mm_struct *mm;
        struct vm_area_struct *vma;
        int err = 0;
-       MA_STATE(mas, &mm->mm_mt, 0, 0);
 
        spin_lock(&ksm_mmlist_lock);
        ksm_scan.mm_slot = list_entry(ksm_mm_head.mm_list.next,
@@ -976,8 +975,9 @@ static int unmerge_and_remove_all_rmap_items(void)
        spin_unlock(&ksm_mmlist_lock);
 
        for (mm_slot = ksm_scan.mm_slot;
-                       mm_slot != &ksm_mm_head; mm_slot = ksm_scan.mm_slot) {
-               mm = mm_slot->mm;
+                       mm_slot != &ksm_mm_head; mm_slot = ksm_scan.mm_slot, mm = mm_slot->mm) {
+               MA_STATE(mas, &mm->mm_mt, 0, 0);
+
                mmap_read_lock(mm);
                mas_set(&mas, 0);
                mas_for_each(&mas, vma, ULONG_MAX) {
@@ -2231,7 +2231,6 @@ static struct rmap_item *scan_get_next_rmap_item(struct page **page)
        struct vm_area_struct *vma;
        struct rmap_item *rmap_item;
        int nid;
-       MA_STATE(mas, &mm->mm_mt, 0, 0);
 
        if (list_empty(&ksm_mm_head.mm_list))
                return NULL;
@@ -2289,6 +2288,8 @@ next_mm:
        }
 
        mm = slot->mm;
+       MA_STATE(mas, &mm->mm_mt, 0, 0);
+
        mmap_read_lock(mm);
        if (ksm_test_exit(mm))
                goto no_vmas;