|
@@ -1673,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++;
|