From: Martin Hicks Christoph Lameter and Marcelo Tosatti asked to get rid of the atomic_inc_and_test() to cleanup the atomic ops in the zone reclaim code. Signed-off-by: Martin Hicks Signed-off-by: Christoph Lameter Signed-off-by: Andrew Morton --- mm/page_alloc.c | 2 +- mm/vmscan.c | 9 +++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff -puN mm/page_alloc.c~vm-zone-reclaim-atomic-ops-cleanup mm/page_alloc.c --- devel/mm/page_alloc.c~vm-zone-reclaim-atomic-ops-cleanup 2005-08-06 15:34:29.000000000 -0700 +++ devel-akpm/mm/page_alloc.c 2005-08-06 15:34:29.000000000 -0700 @@ -1909,7 +1909,7 @@ static void __init free_area_init_core(s zone->nr_scan_inactive = 0; zone->nr_active = 0; zone->nr_inactive = 0; - atomic_set(&zone->reclaim_in_progress, -1); + atomic_set(&zone->reclaim_in_progress, 0); if (!size) continue; diff -puN mm/vmscan.c~vm-zone-reclaim-atomic-ops-cleanup mm/vmscan.c --- devel/mm/vmscan.c~vm-zone-reclaim-atomic-ops-cleanup 2005-08-06 15:34:29.000000000 -0700 +++ devel-akpm/mm/vmscan.c 2005-08-06 15:34:29.000000000 -0700 @@ -822,6 +822,8 @@ shrink_zone(struct zone *zone, struct sc unsigned long nr_active; unsigned long nr_inactive; + atomic_inc(&zone->reclaim_in_progress); + /* * Add one to `nr_to_scan' just to make sure that the kernel will * slowly sift through the active list. @@ -861,6 +863,8 @@ shrink_zone(struct zone *zone, struct sc } throttle_vm_writeout(); + + atomic_dec(&zone->reclaim_in_progress); } /* @@ -900,9 +904,7 @@ shrink_caches(struct zone **zones, struc if (zone->all_unreclaimable && sc->priority != DEF_PRIORITY) continue; /* Let kswapd poll it */ - atomic_inc(&zone->reclaim_in_progress); shrink_zone(zone, sc); - atomic_dec(&zone->reclaim_in_progress); } } @@ -1358,14 +1360,13 @@ int zone_reclaim(struct zone *zone, unsi sc.swap_cluster_max = SWAP_CLUSTER_MAX; /* Don't reclaim the zone if there are other reclaimers active */ - if (!atomic_inc_and_test(&zone->reclaim_in_progress)) + if (atomic_read(&zone->reclaim_in_progress) > 0) goto out; shrink_zone(zone, &sc); total_reclaimed = sc.nr_reclaimed; out: - atomic_dec(&zone->reclaim_in_progress); return total_reclaimed; } _