|
@@ -74,6 +74,9 @@ struct scan_control {
|
|
|
|
|
|
int may_writepage;
|
|
|
|
|
|
+ /* Can pages be swapped as part of reclaim? */
|
|
|
+ int may_swap;
|
|
|
+
|
|
|
/* This context's SWAP_CLUSTER_MAX. If freeing memory for
|
|
|
* suspend, we effectively ignore SWAP_CLUSTER_MAX.
|
|
|
* In this context, it doesn't matter that we scan the
|
|
@@ -414,7 +417,7 @@ static int shrink_list(struct list_head *page_list, struct scan_control *sc)
|
|
|
* Anonymous process memory has backing store?
|
|
|
* Try to allocate it some swap space here.
|
|
|
*/
|
|
|
- if (PageAnon(page) && !PageSwapCache(page)) {
|
|
|
+ if (PageAnon(page) && !PageSwapCache(page) && sc->may_swap) {
|
|
|
if (!add_to_swap(page))
|
|
|
goto activate_locked;
|
|
|
}
|
|
@@ -927,6 +930,7 @@ int try_to_free_pages(struct zone **zones,
|
|
|
|
|
|
sc.gfp_mask = gfp_mask;
|
|
|
sc.may_writepage = 0;
|
|
|
+ sc.may_swap = 1;
|
|
|
|
|
|
inc_page_state(allocstall);
|
|
|
|
|
@@ -1027,6 +1031,7 @@ loop_again:
|
|
|
total_reclaimed = 0;
|
|
|
sc.gfp_mask = GFP_KERNEL;
|
|
|
sc.may_writepage = 0;
|
|
|
+ sc.may_swap = 1;
|
|
|
sc.nr_mapped = read_page_state(nr_mapped);
|
|
|
|
|
|
inc_page_state(pageoutrun);
|