* of reclaimed pages
  */
 static unsigned long shrink_inactive_list(unsigned long max_scan,
-                       struct zone *zone, struct scan_control *sc, int file)
+                       struct zone *zone, struct scan_control *sc,
+                       int priority, int file)
 {
        LIST_HEAD(page_list);
        struct pagevec pvec;
                unsigned long nr_freed;
                unsigned long nr_active;
                unsigned int count[NR_LRU_LISTS] = { 0, };
-               int mode = (sc->order > PAGE_ALLOC_COSTLY_ORDER) ?
-                                       ISOLATE_BOTH : ISOLATE_INACTIVE;
+               int mode = ISOLATE_INACTIVE;
+
+               /*
+                * If we need a large contiguous chunk of memory, or have
+                * trouble getting a small set of contiguous pages, we
+                * will reclaim both active and inactive pages.
+                *
+                * We use the same threshold as pageout congestion_wait below.
+                */
+               if (sc->order > PAGE_ALLOC_COSTLY_ORDER)
+                       mode = ISOLATE_BOTH;
+               else if (sc->order && priority < DEF_PRIORITY - 2)
+                       mode = ISOLATE_BOTH;
 
                nr_taken = sc->isolate_pages(sc->swap_cluster_max,
                             &page_list, &nr_scan, sc->order, mode,
                shrink_active_list(nr_to_scan, zone, sc, priority, file);
                return 0;
        }
-       return shrink_inactive_list(nr_to_scan, zone, sc, file);
+       return shrink_inactive_list(nr_to_scan, zone, sc, priority, file);
 }
 
 /*