]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/blobdiff - mm/khugepaged.c
mm: thp: use down_read_trylock() in khugepaged to avoid long block
[mirror_ubuntu-bionic-kernel.git] / mm / khugepaged.c
index 33255bf91074cbc23b783c7ea143567b5c601e6b..c7d5624e2376ff18f15ae2f2d059e28564b9db80 100644 (file)
@@ -1679,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++;