]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/blobdiff - mm/khugepaged.c
net: hns3: Fixes API to fetch ethernet header length with kernel default
[mirror_ubuntu-bionic-kernel.git] / mm / khugepaged.c
index ea4ff259b67195b32d3335795d4de80c4e6e5bcf..c7d5624e2376ff18f15ae2f2d059e28564b9db80 100644 (file)
@@ -530,7 +530,12 @@ static int __collapse_huge_page_isolate(struct vm_area_struct *vma,
                        goto out;
                }
 
-               VM_BUG_ON_PAGE(PageCompound(page), page);
+               /* TODO: teach khugepaged to collapse THP mapped with pte */
+               if (PageCompound(page)) {
+                       result = SCAN_PAGE_COMPOUND;
+                       goto out;
+               }
+
                VM_BUG_ON_PAGE(!PageAnon(page), page);
 
                /*
@@ -1674,10 +1679,14 @@ static unsigned int khugepaged_scan_mm_slot(unsigned int pages,
        spin_unlock(&khugepaged_mm_lock);
 
        mm = mm_slot->mm;
-       down_read(&mm->mmap_sem);
-       if (unlikely(khugepaged_test_exit(mm)))
-               vma = NULL;
-       else
+       /*
+        * Don't wait for semaphore (to avoid long wait times).  Just move to
+        * the next mm on the list.
+        */
+       vma = NULL;
+       if (unlikely(!down_read_trylock(&mm->mmap_sem)))
+               goto breakouterloop_mmap_sem;
+       if (likely(!khugepaged_test_exit(mm)))
                vma = find_vma(mm, khugepaged_scan.address);
 
        progress++;