diff options
author | Christoph Lameter <clameter@engr.sgi.com> | 2006-02-24 16:04:22 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-02-24 17:31:39 -0500 |
commit | d4f7796e9b387e471ab0e8ed4e0c2bd616b3c193 (patch) | |
tree | e68b20c1952e3d1bfc6bb51c1b38cd6323e2c771 /mm/vmscan.c | |
parent | c04030e16dbea2f7581f82cc6688695927f6ac5b (diff) |
[PATCH] vmscan: fix zone_reclaim
- PF_SWAPWRITE needs to be set for RECLAIM_SWAP to be able to write
out pages to swap. Currently RECLAIM_SWAP may not do that.
- remove setting nr_reclaimed pages after slab reclaim since the slab shrinking
code does not use that and the nr_reclaimed pages is just right for the
intended follow up action.
Signed-off-by: Christoph Lameter <clameter@sgi.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'mm/vmscan.c')
-rw-r--r-- | mm/vmscan.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/mm/vmscan.c b/mm/vmscan.c index 1838c15ca4fd..b0af7593d01e 100644 --- a/mm/vmscan.c +++ b/mm/vmscan.c | |||
@@ -1908,7 +1908,12 @@ int zone_reclaim(struct zone *zone, gfp_t gfp_mask, unsigned int order) | |||
1908 | sc.swap_cluster_max = SWAP_CLUSTER_MAX; | 1908 | sc.swap_cluster_max = SWAP_CLUSTER_MAX; |
1909 | 1909 | ||
1910 | cond_resched(); | 1910 | cond_resched(); |
1911 | p->flags |= PF_MEMALLOC; | 1911 | /* |
1912 | * We need to be able to allocate from the reserves for RECLAIM_SWAP | ||
1913 | * and we also need to be able to write out pages for RECLAIM_WRITE | ||
1914 | * and RECLAIM_SWAP. | ||
1915 | */ | ||
1916 | p->flags |= PF_MEMALLOC | PF_SWAPWRITE; | ||
1912 | reclaim_state.reclaimed_slab = 0; | 1917 | reclaim_state.reclaimed_slab = 0; |
1913 | p->reclaim_state = &reclaim_state; | 1918 | p->reclaim_state = &reclaim_state; |
1914 | 1919 | ||
@@ -1932,11 +1937,10 @@ int zone_reclaim(struct zone *zone, gfp_t gfp_mask, unsigned int order) | |||
1932 | * a long time. | 1937 | * a long time. |
1933 | */ | 1938 | */ |
1934 | shrink_slab(sc.nr_scanned, gfp_mask, order); | 1939 | shrink_slab(sc.nr_scanned, gfp_mask, order); |
1935 | sc.nr_reclaimed = 1; /* Avoid getting the off node timeout */ | ||
1936 | } | 1940 | } |
1937 | 1941 | ||
1938 | p->reclaim_state = NULL; | 1942 | p->reclaim_state = NULL; |
1939 | current->flags &= ~PF_MEMALLOC; | 1943 | current->flags &= ~(PF_MEMALLOC | PF_SWAPWRITE); |
1940 | 1944 | ||
1941 | if (sc.nr_reclaimed == 0) | 1945 | if (sc.nr_reclaimed == 0) |
1942 | zone->last_unsuccessful_zone_reclaim = jiffies; | 1946 | zone->last_unsuccessful_zone_reclaim = jiffies; |