]> rtime.felk.cvut.cz Git - can-eth-gw-linux.git/blobdiff - mm/ksm.c
Fix bug
[can-eth-gw-linux.git] / mm / ksm.c
index ae539f0b8aa1115ce2ba86ae8b94ec48a79b8333..382d930a0bf156c572176f8a47a7540d85f70eef 100644 (file)
--- a/mm/ksm.c
+++ b/mm/ksm.c
@@ -778,8 +778,6 @@ static int replace_page(struct vm_area_struct *vma, struct page *page,
                        struct page *kpage, pte_t orig_pte)
 {
        struct mm_struct *mm = vma->vm_mm;
-       pgd_t *pgd;
-       pud_t *pud;
        pmd_t *pmd;
        pte_t *ptep;
        spinlock_t *ptl;
@@ -792,18 +790,10 @@ static int replace_page(struct vm_area_struct *vma, struct page *page,
        if (addr == -EFAULT)
                goto out;
 
-       pgd = pgd_offset(mm, addr);
-       if (!pgd_present(*pgd))
+       pmd = mm_find_pmd(mm, addr);
+       if (!pmd)
                goto out;
-
-       pud = pud_offset(pgd, addr);
-       if (!pud_present(*pud))
-               goto out;
-
-       pmd = pmd_offset(pud, addr);
        BUG_ON(pmd_trans_huge(*pmd));
-       if (!pmd_present(*pmd))
-               goto out;
 
        mmun_start = addr;
        mmun_end   = addr + PAGE_SIZE;
@@ -1929,12 +1919,9 @@ static ssize_t run_store(struct kobject *kobj, struct kobj_attribute *attr,
        if (ksm_run != flags) {
                ksm_run = flags;
                if (flags & KSM_RUN_UNMERGE) {
-                       int oom_score_adj;
-
-                       oom_score_adj = test_set_oom_score_adj(OOM_SCORE_ADJ_MAX);
+                       set_current_oom_origin();
                        err = unmerge_and_remove_all_rmap_items();
-                       compare_swap_oom_score_adj(OOM_SCORE_ADJ_MAX,
-                                                               oom_score_adj);
+                       clear_current_oom_origin();
                        if (err) {
                                ksm_run = KSM_RUN_STOP;
                                count = err;