[PATCH] VM: zone reclaim atomic ops cleanup
authorMartin Hicks <mort@bork.org>
Sat, 3 Sep 2005 22:54:51 +0000 (15:54 -0700)
committerLinus Torvalds <torvalds@evo.osdl.org>
Mon, 5 Sep 2005 07:05:44 +0000 (00:05 -0700)
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 <mort@sgi.com>
Signed-off-by: Christoph Lameter <clameter@sgi.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
mm/page_alloc.c
mm/vmscan.c

index 620aa11b24ebf3efe857e860de351923382b67e5..d157dae8c9f3fa068206816f234f89dcfad5a5a5 100644 (file)
@@ -1909,7 +1909,7 @@ static void __init free_area_init_core(struct pglist_data *pgdat,
                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;
 
index ab631a3c62c3c1ffefa41cc510b5889e5ceb21ca..0095533cdde963143f7988c048a110519cc50a31 100644 (file)
@@ -822,6 +822,8 @@ shrink_zone(struct zone *zone, struct scan_control *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 scan_control *sc)
        }
 
        throttle_vm_writeout();
+
+       atomic_dec(&zone->reclaim_in_progress);
 }
 
 /*
@@ -900,9 +904,7 @@ shrink_caches(struct zone **zones, struct scan_control *sc)
                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, unsigned int gfp_mask, unsigned int order)
                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;
 }