From d4a208f4bd67a7476ad402f9c906e4b246886355 Mon Sep 17 00:00:00 2001 From: "Rafael J. Wysocki" Date: Sun, 6 May 2007 14:50:48 -0700 Subject: [PATCH] --- yaml --- r: 54268 b: refs/heads/master c: b1296cc48b39355241470ef934a5e2270e3f23bd h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/mm/vmscan.c | 13 +++++++++---- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/[refs] b/[refs] index cde791f05002..d562e8565d64 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: d1d241cc2c5feec057c370aa71637380b1b945d5 +refs/heads/master: b1296cc48b39355241470ef934a5e2270e3f23bd diff --git a/trunk/mm/vmscan.c b/trunk/mm/vmscan.c index db023e2ff385..56651a10c366 100644 --- a/trunk/mm/vmscan.c +++ b/trunk/mm/vmscan.c @@ -1323,8 +1323,6 @@ static int kswapd(void *p) for ( ; ; ) { unsigned long new_order; - try_to_freeze(); - prepare_to_wait(&pgdat->kswapd_wait, &wait, TASK_INTERRUPTIBLE); new_order = pgdat->kswapd_max_order; pgdat->kswapd_max_order = 0; @@ -1335,12 +1333,19 @@ static int kswapd(void *p) */ order = new_order; } else { - schedule(); + if (!freezing(current)) + schedule(); + order = pgdat->kswapd_max_order; } finish_wait(&pgdat->kswapd_wait, &wait); - balance_pgdat(pgdat, order); + if (!try_to_freeze()) { + /* We can speed up thawing tasks if we don't call + * balance_pgdat after returning from the refrigerator + */ + balance_pgdat(pgdat, order); + } } return 0; }