From: "Rafael J. Wysocki" Unsigned longs cannot be negative. Signed-off-by: Rafael J. Wysocki Cc: Pavel Machek Signed-off-by: Andrew Morton --- include/linux/swap.h | 2 +- mm/vmscan.c | 9 +++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff -puN include/linux/swap.h~vmscan-use-unsigned-longs-shrink_all_memory-fix include/linux/swap.h --- devel/include/linux/swap.h~vmscan-use-unsigned-longs-shrink_all_memory-fix 2006-02-27 19:13:30.000000000 -0800 +++ devel-akpm/include/linux/swap.h 2006-02-27 19:13:30.000000000 -0800 @@ -173,7 +173,7 @@ extern void swap_setup(void); /* linux/mm/vmscan.c */ extern unsigned long try_to_free_pages(struct zone **, gfp_t); -extern int shrink_all_memory(unsigned long nr_pages); +extern unsigned long shrink_all_memory(unsigned long nr_pages); extern int vm_swappiness; #ifdef CONFIG_NUMA diff -puN mm/vmscan.c~vmscan-use-unsigned-longs-shrink_all_memory-fix mm/vmscan.c --- devel/mm/vmscan.c~vmscan-use-unsigned-longs-shrink_all_memory-fix 2006-02-27 19:13:30.000000000 -0800 +++ devel-akpm/mm/vmscan.c 2006-02-27 19:13:30.000000000 -0800 @@ -1779,22 +1779,23 @@ void wakeup_kswapd(struct zone *zone, in * Try to free `nr_pages' of memory, system-wide. Returns the number of freed * pages. */ -int shrink_all_memory(unsigned long nr_pages) +unsigned long shrink_all_memory(unsigned long nr_pages) { pg_data_t *pgdat; unsigned long nr_to_free = nr_pages; - int ret = 0; + unsigned long ret = 0; struct reclaim_state reclaim_state = { .reclaimed_slab = 0, }; current->reclaim_state = &reclaim_state; for_each_pgdat(pgdat) { - int freed; + unsigned long freed; + freed = balance_pgdat(pgdat, nr_to_free, 0); ret += freed; nr_to_free -= freed; - if (nr_to_free <= 0) + if ((long)nr_to_free <= 0) break; } current->reclaim_state = NULL; _