From 852191066accbe6fa86014ec49c1fd3cfdd2ad3d Mon Sep 17 00:00:00 2001 From: Christoph Lameter Date: Wed, 18 Jan 2006 17:42:30 -0800 Subject: [PATCH] --- yaml --- r: 18907 b: refs/heads/master c: f1fd1067ece574ab56e4a70878b9a5a1ed4c3c42 h: refs/heads/master i: 18905: ad69350445ae3060b61e710e7c6e807a16b4d2aa 18903: 113640fcf2c3addef9db8febc730911f62564764 v: v3 --- [refs] | 2 +- trunk/mm/vmscan.c | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index 93ffb5287f72..cc5f035ca9ef 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: fc3012896337c83a056c496d7cfb0072e1591181 +refs/heads/master: f1fd1067ece574ab56e4a70878b9a5a1ed4c3c42 diff --git a/trunk/mm/vmscan.c b/trunk/mm/vmscan.c index 827bf674577a..e5117b6897a9 100644 --- a/trunk/mm/vmscan.c +++ b/trunk/mm/vmscan.c @@ -71,6 +71,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 @@ -458,6 +461,8 @@ static int shrink_list(struct list_head *page_list, struct scan_control *sc) * Try to allocate it some swap space here. */ if (PageAnon(page) && !PageSwapCache(page)) { + if (!sc->may_swap) + goto keep_locked; if (!add_to_swap(page, GFP_ATOMIC)) goto activate_locked; } @@ -1166,6 +1171,7 @@ int try_to_free_pages(struct zone **zones, gfp_t gfp_mask) sc.gfp_mask = gfp_mask; sc.may_writepage = 0; + sc.may_swap = 1; inc_page_state(allocstall); @@ -1268,6 +1274,7 @@ static int balance_pgdat(pg_data_t *pgdat, int nr_pages, int order) 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);