]> git.hungrycats.org Git - linux/commitdiff
[PATCH] vm: shrink slab evenly in try_to_free_pages()
authorAndrew Morton <akpm@osdl.org>
Fri, 12 Mar 2004 00:23:19 +0000 (16:23 -0800)
committerLinus Torvalds <torvalds@ppc970.osdl.org>
Fri, 12 Mar 2004 00:23:19 +0000 (16:23 -0800)
From: Nick Piggin <piggin@cyberone.com.au>

In try_to_free_pages(), put even pressure on the slab even if we have
reclaimed enough pages from the LRU.

mm/vmscan.c

index 4f22b005179bec3e223382f8f99bd7e0d5cd082c..c3cbe8db95e25742a54a7d52d392b02813f7fa0a 100644 (file)
@@ -875,6 +875,13 @@ int try_to_free_pages(struct zone **zones,
                get_page_state(&ps);
                nr_reclaimed += shrink_caches(zones, priority, &total_scanned,
                                                gfp_mask, nr_pages, &ps);
+               if (zones[0] - zones[0]->zone_pgdat->node_zones < ZONE_HIGHMEM) {
+                       shrink_slab(total_scanned, gfp_mask);
+                       if (reclaim_state) {
+                               nr_reclaimed += reclaim_state->reclaimed_slab;
+                               reclaim_state->reclaimed_slab = 0;
+                       }
+               }
                if (nr_reclaimed >= nr_pages) {
                        ret = 1;
                        goto out;
@@ -890,13 +897,6 @@ int try_to_free_pages(struct zone **zones,
 
                /* Take a nap, wait for some writeback to complete */
                blk_congestion_wait(WRITE, HZ/10);
-               if (zones[0] - zones[0]->zone_pgdat->node_zones < ZONE_HIGHMEM) {
-                       shrink_slab(total_scanned, gfp_mask);
-                       if (reclaim_state) {
-                               nr_reclaimed += reclaim_state->reclaimed_slab;
-                               reclaim_state->reclaimed_slab = 0;
-                       }
-               }
        }
        if ((gfp_mask & __GFP_FS) && !(gfp_mask & __GFP_NORETRY))
                out_of_memory();