]> asedeno.scripts.mit.edu Git - linux.git/blobdiff - mm/khugepaged.c
Merge tags 'cris-for-4.16' and 'cris-for-4.16-urgent' of git://git.kernel.org/pub...
[linux.git] / mm / khugepaged.c
index ea4ff259b67195b32d3335795d4de80c4e6e5bcf..b7e2268dfc9a15c64eced7bfb857e9a32fc128c1 100644 (file)
@@ -1399,8 +1399,7 @@ static void collapse_shmem(struct mm_struct *mm,
                }
 
                if (page_mapped(page))
-                       unmap_mapping_range(mapping, index << PAGE_SHIFT,
-                                       PAGE_SIZE, 0);
+                       unmap_mapping_pages(mapping, index, 1, false);
 
                spin_lock_irq(&mapping->tree_lock);
 
@@ -1674,10 +1673,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++;