diff options
author | Ralf Baechle <ralf@linux-mips.org> | 2000-03-02 02:36:47 +0000 |
---|---|---|
committer | Ralf Baechle <ralf@linux-mips.org> | 2000-03-02 02:36:47 +0000 |
commit | 8624512aa908741ba2795200133eae0d7f4557ea (patch) | |
tree | d5d3036fccf2604f4c98dedc11e8adb929d6b52e /mm/vmscan.c | |
parent | 7b8f5d6f1d45d9f9de1d26e7d3c32aa5af11b488 (diff) |
Merge with 2.3.48.
Diffstat (limited to 'mm/vmscan.c')
-rw-r--r-- | mm/vmscan.c | 21 |
1 files changed, 15 insertions, 6 deletions
diff --git a/mm/vmscan.c b/mm/vmscan.c index 02cf78030..fa687b7e0 100644 --- a/mm/vmscan.c +++ b/mm/vmscan.c @@ -8,6 +8,7 @@ * Removed kswapd_ctl limits, and swap out as many pages as needed * to bring the system back to freepages.high: 2.4.97, Rik van Riel. * Version: $Id: vmscan.c,v 1.5 1998/02/23 22:14:28 sct Exp $ + * Zone aware kswapd started 02/00, Kanoj Sarcar (kanoj@sgi.com). */ #include <linux/slab.h> @@ -468,7 +469,10 @@ DECLARE_WAIT_QUEUE_HEAD(kswapd_wait); */ int kswapd(void *unused) { + int i; struct task_struct *tsk = current; + pg_data_t *pgdat; + zone_t *zone; tsk->session = 1; tsk->pgrp = 1; @@ -496,12 +500,17 @@ int kswapd(void *unused) * up on a more timely basis. */ do { - /* kswapd is critical to provide GFP_ATOMIC - allocations (not GFP_HIGHMEM ones). */ - if (nr_free_pages() - nr_free_highpages() >= freepages.high) - break; - if (!do_try_to_free_pages(GFP_KSWAPD, 0)) - break; + pgdat = pgdat_list; + while (pgdat) { + for (i = 0; i < MAX_NR_ZONES; i++) { + zone = pgdat->node_zones + i; + if ((!zone->size) || + (!zone->zone_wake_kswapd)) + continue; + do_try_to_free_pages(GFP_KSWAPD, zone); + } + pgdat = pgdat->node_next; + } run_task_queue(&tq_disk); } while (!tsk->need_resched); tsk->state = TASK_INTERRUPTIBLE; |