- local_irq_disable();- if (current_is_kswapd())- __count_vm_events(KSWAPD_STEAL, nr_freed);- __count_zone_vm_events(PGSTEAL, zone, nr_freed);+ nr_reclaimed = shrink_page_list(&page_list, sc, PAGEOUT_IO_ASYNC);++ /*+ * If we are direct reclaiming for contiguous pages and we do+ * not reclaim everything in the list, try again and wait+ * for IO to complete. This will stall high-order allocations+ * but that should be acceptable to the caller+ */+ if (nr_reclaimed < nr_taken && !current_is_kswapd() &&+ sc->lumpy_reclaim_mode) {+ congestion_wait(BLK_RW_ASYNC, HZ/10);

-/*- * We are about to scan this zone at a certain priority level. If that priority- * level is smaller (ie: more urgent) than the previous priority, then note- * that priority level within the zone. This is done so that when the next- * process comes in to scan this zone, it will immediately start out at this- * priority level rather than having to build up its own scanning priority.- * Here, this priority affects only the reclaim-mapped threshold.- */-static inline void note_zone_scanning_priority(struct zone *zone, int priority)-{- if (priority < zone->prev_priority)- zone->prev_priority = priority;+ putback_lru_pages(zone, sc, nr_anon, nr_file, &page_list);+ return nr_reclaimed; }