]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/blobdiff - mm/page_idle.c
memcg, oom: don't require __GFP_FS when invoking memcg OOM killer
[mirror_ubuntu-bionic-kernel.git] / mm / page_idle.c
index 0a49374e693194504e715be8e54489f3eb1db2f1..50468418182727e589a330b8c60a94099c94d2b3 100644 (file)
@@ -65,11 +65,15 @@ static bool page_idle_clear_pte_refs_one(struct page *page,
        while (page_vma_mapped_walk(&pvmw)) {
                addr = pvmw.address;
                if (pvmw.pte) {
-                       referenced = ptep_clear_young_notify(vma, addr,
-                                       pvmw.pte);
+                       /*
+                        * For PTE-mapped THP, one sub page is referenced,
+                        * the whole THP is referenced.
+                        */
+                       if (ptep_clear_young_notify(vma, addr, pvmw.pte))
+                               referenced = true;
                } else if (IS_ENABLED(CONFIG_TRANSPARENT_HUGEPAGE)) {
-                       referenced = pmdp_clear_young_notify(vma, addr,
-                                       pvmw.pmd);
+                       if (pmdp_clear_young_notify(vma, addr, pvmw.pmd))
+                               referenced = true;
                } else {
                        /* unexpected pmd-mapped page? */
                        WARN_ON_ONCE(1);
@@ -132,7 +136,7 @@ static ssize_t page_idle_bitmap_read(struct file *file, struct kobject *kobj,
 
        end_pfn = pfn + count * BITS_PER_BYTE;
        if (end_pfn > max_pfn)
-               end_pfn = ALIGN(max_pfn, BITMAP_CHUNK_BITS);
+               end_pfn = max_pfn;
 
        for (; pfn < end_pfn; pfn++) {
                bit = pfn % BITMAP_CHUNK_BITS;
@@ -177,7 +181,7 @@ static ssize_t page_idle_bitmap_write(struct file *file, struct kobject *kobj,
 
        end_pfn = pfn + count * BITS_PER_BYTE;
        if (end_pfn > max_pfn)
-               end_pfn = ALIGN(max_pfn, BITMAP_CHUNK_BITS);
+               end_pfn = max_pfn;
 
        for (; pfn < end_pfn; pfn++) {
                bit = pfn % BITMAP_CHUNK_BITS;