aboutsummaryrefslogtreecommitdiffstats
path: root/mm
diff options
context:
space:
mode:
Diffstat (limited to 'mm')
-rw-r--r--mm/vmscan.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/mm/vmscan.c b/mm/vmscan.c
index db023e2ff385..56651a10c366 100644
--- a/mm/vmscan.c
+++ b/mm/vmscan.c
@@ -1323,8 +1323,6 @@ static int kswapd(void *p)
1323 for ( ; ; ) { 1323 for ( ; ; ) {
1324 unsigned long new_order; 1324 unsigned long new_order;
1325 1325
1326 try_to_freeze();
1327
1328 prepare_to_wait(&pgdat->kswapd_wait, &wait, TASK_INTERRUPTIBLE); 1326 prepare_to_wait(&pgdat->kswapd_wait, &wait, TASK_INTERRUPTIBLE);
1329 new_order = pgdat->kswapd_max_order; 1327 new_order = pgdat->kswapd_max_order;
1330 pgdat->kswapd_max_order = 0; 1328 pgdat->kswapd_max_order = 0;
@@ -1335,12 +1333,19 @@ static int kswapd(void *p)
1335 */ 1333 */
1336 order = new_order; 1334 order = new_order;
1337 } else { 1335 } else {
1338 schedule(); 1336 if (!freezing(current))
1337 schedule();
1338
1339 order = pgdat->kswapd_max_order; 1339 order = pgdat->kswapd_max_order;
1340 } 1340 }
1341 finish_wait(&pgdat->kswapd_wait, &wait); 1341 finish_wait(&pgdat->kswapd_wait, &wait);
1342 1342
1343 balance_pgdat(pgdat, order); 1343 if (!try_to_freeze()) {
1344 /* We can speed up thawing tasks if we don't call
1345 * balance_pgdat after returning from the refrigerator
1346 */
1347 balance_pgdat(pgdat, order);
1348 }
1344 } 1349 }
1345 return 0; 1350 return 0;
1346} 1351}